更低api上的androidx自定义字体';s

更低api上的androidx自定义字体';s,android,xml,fonts,Android,Xml,Fonts,我在Kotlin应用程序中使用AndroidX,我一直在尝试添加自定义字体。我在res/font文件夹中有.ttf文件和两个字体系列(v26和普通)。v26文件包含android:前缀,而另一个文件包含app:前缀 我还在gradle中添加了appcompat和遗留支持实现,但不知何故,我仍然无法在Android 6.0上正确显示字体(适用于较新的设备)。我正在将AppTheme中的字体系列设置为: <item name="fontFamily">@font/avalon&l

我在Kotlin应用程序中使用AndroidX,我一直在尝试添加自定义字体。我在res/font文件夹中有.ttf文件和两个字体系列(v26和普通)。v26文件包含android:前缀,而另一个文件包含app:前缀

我还在gradle中添加了appcompat和遗留支持实现,但不知何故,我仍然无法在Android 6.0上正确显示字体(适用于较新的设备)。我正在将AppTheme中的字体系列设置为:

    <item name="fontFamily">@font/avalon</item>
@font/avalon

我不知道我还能尝试什么。有人遇到过同样的问题吗?

我认为在旧的API中,不能将fontFamily用于自定义字体

但是,您可以创建自己的文本视图(扩展默认文本视图)并设置自定义字体:

public class MyTextView extends TextView {

public MyTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

public MyTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public MyTextView(Context context) {
    super(context);
    init();
}

private void init() {
    if (!isInEditMode()) {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/custom.ttf");
        setTypeface(tf);
    }
}
}

或者像这样设置字体:

Typeface typeface=Typeface.createFromAsset(getAssets(), "fonts/custom.ttf");
myTextView.setTypeface(typeface);

有没有一种方法可以通过代码全局设置字体?根据我的经验,您应该使用自定义字体创建自定义组件-自定义editText、textView等。此外,您还可以使用自定义属性从XML设置自定义字体,因此,您可以指定字体并在自定义TextView和setTypeface中读取。我有自定义字体组件的自定义样式,但尽管使用了app compat,它仍然只适用于较新的api。但我现在将尝试为元素自定义类。您使用哪个版本的appCompat?尝试实现'com.android.support:appcompat-v7:26.1.0'implementation'androidx.appcompat:appcompat:1.0.0'我正在使用androidx-appcompat(因为我在整个应用程序中使用android x)