创建一个更好的自定义字体

时间:2013-08-06 12:30:40

标签: android android-fonts

我是Android新手,我想在我的应用中使用自定义字体。我写了两种创建自定义字体的方法。你能告诉我哪一个更好更快。 第一种方法是使用singleton类第二种方式是创建我自己的textview。

与单身人士

public class FontFactory {
    private  static FontFactory instance;
    private HashMap<String, Typeface> fontMap = new HashMap<String, Typeface>();

    private FontFactory() {
    }

    public static FontFactory getInstance() {
        if (instance == null){
            instance = new FontFactory();
        }
        return instance;
    }

    public Typeface getFont(DefaultActivity pActivity,String font) {
        Typeface typeface = fontMap.get(font);
        if (typeface == null) {
            typeface = Typeface.createFromAsset(pActivity.getResources().getAssets(), "fonts/" + font);
            fontMap.put(font, typeface);
        }
        return typeface;
    }
}

使用自己的textview

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context);
    }

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

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

    private void setFonts(Context context, AttributeSet attrs){
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyTextView_customFont);
        String ttfName = a.getString(R.styleable.MyTextView_customFont_ttf_name);

        setCustomTypeFace(context, ttfName);
    }

    public void setCustomTypeFace(Context context, String ttfName) {
        Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/MuseoSansCyrl_"+ttfName+".otf");
        setTypeface(font);
    }
    @Override
    public void setTypeface(Typeface tf) {

        super.setTypeface(tf);
    }

}

1 个答案:

答案 0 :(得分:1)

在自定义textview方法中,每次创建CustomTextView(或更改其字体)时都会创建Typeface对象,而工厂会将已经加载的文件保留在内存中并重新使用它们。

使用自定义文本视图的方法在某些情况下可能会正常工作,但如果您突然需要创建很多(或更改其中很多字体),可能会显着降低您的性能,如{ {3}}

我会选择单身人士。