首页 > 解决方案 > android - fontFamily 无法在 androidx 上运行

问题描述

很奇怪为什么 fontFamily 不能在 androidX 上工作。

这是我的代码:

   <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="testing "
        android:textSize="17sp"
        android:fontFamily="@font/iransans"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

上面的代码根本不影响字体,当我将 textview 转换为 app compact 时,它可以工作:

<androidx.appcompat.widget.AppCompatTextView

我想设置我的整个应用程序字体,但它没有按我预期的那样工作:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="android:fontFamily">@font/iransans</item>
</style>

有什么办法可以解决这个问题吗?如何在不为每个视图设置字体系列的情况下在整个应用程序中使用我的字体?

标签: androidandroid-themeandroid-stylesandroidxandroid-fonts

解决方案


您可能会遇到 3 件事中的 1 件以上:

  1. 您正在设置android:fontFamily但未设置fontFamily在您的主题中。确保你有两个:
<item name="fontFamily">@font/iransans</item>
<item name="android:fontFamily">@font/iransans</item>
  1. 如果您在较旧的 API 级别上运行,则可能会遇到此错误,升级到 androidx.appcompat 依赖项可能会解决问题:

    https://developer.android.com/jetpack/androidx/releases/appcompat#1.1.0-alpha02

  2. 如果您在 中定义了任何其他主题styles.xml,并且您的父TextView主题使用单独的主题,则该主题可能优先fontFamily于视图上的属性(我尚未确定原因,但这是我正在运行的场景进入我自己)。将android:thememy 直接设置为TextView定义字体系列的样式就可以了。

<TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:theme="@style/MyCustomFontTextAppearance" />

在样式.xml 中:

<style name="MyCustomFontTextAppearance" parent="TextAppearance.AppCompat.Body1">
    <item name="fontFamily">@font/iransans</item>
    <item name="android:fontFamily">@font/iransans</item>
</style>

推荐阅读