在API 26之前从TypedArray获取字体资源

时间:2017-07-26 23:42:57

标签: android

Android O通过支持库将xml中的字体引入API 16。但是,我无法找到相当于TypedArray.getFont()的支持,这需要API级别26。

val array = context.obtainStyledAttributes(styleResId, R.styleable.TextAppearance)
val font = array.getFont(R.styleable.TextAppearance_android_fontFamily) // nope

我可以使用某种compat实用程序类从样式资源ID中检索字体吗?

1 个答案:

答案 0 :(得分:17)

找到一种解决方法,即从TypedArray中找到字体的资源ID,然后使用ResourcesCompat加载字体。

val array = context.obtainStyledAttributes(styleResId, R.styleable.TextAppearance)
if (array.hasValue(R.styleable.TextAppearance_android_fontFamily)) {
    val fontId = array.getResourceId(R.styleable.TextAppearance_android_fontFamily, -1)
    val typeface = ResourcesCompat.getFont(context, fontId)
}