使用自定义字体与AndroidX

4

我正在尝试将自定义字体族添加到我的Android项目中,该项目使用Androidx而不是旧的支持库。

但是我似乎找不到一种方法来支持旧的SDK版本(23+)与AndroidX库中的字体族,我在网上找到的所有内容都提到了旧的支持库。

我的当前字体族文件如下:

<font-family
             xmlns:app="http://schemas.android.com/apk/res-auto">

    <font
        app:fontStyle="normal"
        app:fontWeight="500"
        app:font="@font/raleway_medium"/>

    <font
        app:fontStyle="normal"
        app:fontWeight="700"
        app:font="@font/raleway_bold" />

    <font
        app:fontStyle="normal"
        app:fontWeight="600"
        app:font="@font/raleway_semibold" />

</font-family>

有没有一种方法可以在使用androidx库的旧版SDK版本上使其正常工作?

是的,我也有这个问题。我的应用程序在使用大量自定义字体时运行得非常好。然后我们从v7升级到androidX,结果:没有更多的自定义字体(但只在模拟器和设备上——自定义字体仍然在预览窗格中完美显示,叹气!)。谢谢你,Google! - SMBiggs
我遇到了类似的问题,有解决方案吗? - deepThought
任何进展了吗,@ScottBiggs,你能帮忙修复这个问题吗? - Saad Bilal
@SaadBilal 这很奇怪——有时候它可以工作,有时候却不行。似乎这取决于设备、Android版本以及风向。显然我并不清楚实际发生了什么。唉。 - SMBiggs
2个回答

1
在您的XML文件中,应该将TextView替换为androidx.appcompat.widget.AppCompatTextView

1

你需要使用appandroid属性声明字体,这样它才能在“所有”sdk版本上工作。

<font
    android:font="@font/myfont"
    android:fontStyle="normal"
    android:fontWeight="400"
    app:font="@font/myfont"
    app:fontStyle="normal"
    app:fontWeight="400" />

当您声明字体时,可以通过以下方式在XML中应用它:
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="android:fontFamily">@font/customfont</item>
    <item name="fontFamily">@font/customfont</item>
...

或者通过编程方式实现:
val typeface = ResourcesCompat.getFont(context, R.font.customfont)
textView.typeface = typeface

2
谢谢您的回复,但即使有这个更改,我仍无法在 Android 8 之前的设备上运行它。您知道我需要哪个 androidx 库才能让它在旧版本上运行吗?我在网上看到的都是 com.android.support:support-v4,但这对 androidx 是不起作用的。 - Pascal_AC
我稍微修改了我的答案。请再次核对一下。如果不行,您能否展示一些代码等?谢谢。 - chrjs
2
是的,楼主正在询问使用哪个AndroidX包才能使SupportV4正常工作 - 否则代码会在Lint中失败。 - jesses.co.tt
我也遇到了编译错误。为了让它正常工作,我需要在gradle文件中包含哪个库? - SMBiggs
有什么进展吗?我也卡在这里了。 - Saad Bilal
我也卡住了。这太糟糕了。 - Reza Hajianpour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接