使用Fonts in XML时遇到字体渲染问题
以下字体家族文件在不具有roboto_regular
属性的情况下应选择android:textStyle
字体,而在与roboto_medium
属性一起使用时应选择android:textStyle="bold"
:
roboto.xml
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:font="@font/roboto_regular"
app:fontWeight="400" />
<font
app:font="@font/roboto_medium"
app:fontWeight="700" />
</font-family>
应用此字体系列的布局为:
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto"
android:text="Roboto font family"
android:textSize="16sp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto"
android:text="Roboto font family bold"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_regular"
android:text="Roboto Regular"
android:textSize="16sp" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_medium"
android:text="Roboto Medium"
android:textSize="16sp" />
这可以在Android 27和25上正常运行,但在Android <25上会应用额外的粗体效果(请参阅Android 21和23的屏幕截图)。
为fontWeight="700"
设置其他字体时,问题更加明显,如
custom_font_family.xml
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:font="@font/roboto_regular"
app:fontWeight="400" />
<font
app:font="@font/poor_story_regular"
app:fontWeight="700" />
</font-family>
对应的布局摘录为:
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/custom_font_family"
android:text="Custom font family"
android:textSize="16sp" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/custom_font_family"
android:text="Custom font family bold"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poor_story_regular"
android:text="Poor story regular"
android:textSize="16sp" />
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poor_story_regular"
android:text="Poor story regular bold"
android:textSize="16sp"
android:textStyle="bold" />
一个独立的项目来演示这个问题,可以在这里找到: https://github.com/NicoEkino/FontFamilyIssue