fontFamily在低于24的API级别上无法正常工作

时间:2018-10-30 13:21:05

标签: android android-layout

使用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的屏幕截图)。

API 27呈现:

API 27 rendering

API 25呈现:

API 25 rendering

API 23呈现:

API 23 rendering:

API 21呈现:

API 21 rendering

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

0 个答案:

没有答案