Android自定义字体:全局设置不会使其适用于列表视图

时间:2016-03-02 17:24:01

标签: android listview fonts

在我的Android应用程序中,我在应用程序文件中全局设置了自定义字体。

FontsOverride.java

public class FontsOverride {

public static void setDefaultFont(Context context,
                                  String staticTypefaceFieldName, String fontAssetName) {
    final Typeface regular = Typeface.createFromAsset(context.getAssets(),
            fontAssetName);
    replaceFont(staticTypefaceFieldName, regular);
}

protected static void replaceFont(String staticTypefaceFieldName,
                                  final Typeface newTypeface) {
    try {
        final Field staticField = Typeface.class
                .getDeclaredField(staticTypefaceFieldName);
        staticField.setAccessible(true);
        staticField.set(null, newTypeface);
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}
}

在扩展应用程序的类中,

@Override
public void onCreate() {
    super.onCreate();

    FontsOverride.setDefaultFont(this, "DEFAULT", "fonts/GOTHAMRND-BOOK.OTF");
    FontsOverride.setDefaultFont(this, "DEFAULT_BOLD", "fonts/GOTHAMRND-BOLD.OTF");
    FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/GOTHAMRND-BOOK.OTF");
    FontsOverride.setDefaultFont(this, "SANS_SERIF", "fonts/GOTHAMRND-BOOK.OTF");
    FontsOverride.setDefaultFont(this, "SERIF", "fonts/GOTHAMRND-BOOK.OTF");

}

此外,我在main下创建了一个名为“assets”的文件夹,在“assets”下创建了另一个名为“fonts”的文件夹。它包含引用的所有字体文件。

有了这个,除了列表视图,可扩展列表视图和网格视图之外,该字体随处可见。

我有什么遗漏的吗?为什么特别不适用于列表视图,可扩展列表视图和网格视图。我尝试在styles.xml中添加字体:

<style name="AppTheme.NoActionBar">
    <item name="android:typeface">serif</item>
</style>

有人可以帮助我吗?我不想通过列表适配器对列表中的textview中的字体进行硬编码,因为这会降低性能并最终占用大量的CPU。此外,它还会影响长列表滚动的平滑度,如果此列表位于viewpager中,则会影响viewpager滑动平滑度。

0 个答案:

没有答案