全球更改Android字体的最简单方法?

时间:2011-11-14 22:06:12

标签: android

我有一个ttf文件,理论上可行,但我不打算触摸500多行代码来以编程方式更改它。什么是最简单的方法?

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.html

3 个答案:

答案 0 :(得分:3)

我自己处理过这个问题;虽然我无法在全球范围内设置自定义字体,但我能够让它更容易处理。

所以在我的Constants类(C.java)中我有一个Inner类:

public static final class TYPEFACE {
    public static final Typeface Helvetica(Context ctx){
        Typeface typeface = Typeface.createFromAsset(ctx.getAssets(), "helvetica.otf");
        return typeface;
    }
    public static final Typeface ArialRounded(Context ctx){
        Typeface typeface = Typeface.createFromAsset(ctx.getAssets(), "arial_rounded.ttf");
        return typeface;
    }
} 

在我的代码中,在声明和初始化TextView后我只是设置了它的字体:

TextView title = (TextView)findViewById(R.id.title);
title.setTypeface(C.TYPEFACE.Helvetica(this));

我知道这不能解决你的问题,但我希望它有所帮助...

-serkan

答案 1 :(得分:3)

使用静态TYPEFACE扩展previous答案:

添加新功能:

public static void applyCustomFont(ViewGroup list, Typeface customTypeface) {
            for (int i = 0; i < list.getChildCount(); i++) {
                View view = list.getChildAt(i);
                if (view instanceof ViewGroup) {
                    applyCustomFont((ViewGroup) view, customTypeface);
                } else if (view instanceof TextView) {
                    ((TextView) view).setTypeface(customTypeface);
                }
            }
        }

获取布局的根视图:

View rootView = findViewById(android.R.id.content)

将整个活动表单的自定义字体应用于所有子元素:

applyCustomFont((ViewGroup)rootView, C.TYPEFACE.ArialRounded(this));

答案 2 :(得分:0)

另一种方法是扩展TextView的自定义视图。不漂亮,但你不需要在整个地方复制字体代码。

总之,这肯定是一个非常讨厌的问题。