为所有android项目添加默认的ttf字体

时间:2015-11-05 11:02:43

标签: android android-layout android-studio

将字体更改为android项目的最简单,最快捷的方法是什么,我希望避免更改每个视图。

2 个答案:

答案 0 :(得分:1)

使用Calligraphy

通过使用此库,您无需更改每个视图,只需创建自定义Activity类并覆盖此方法:

@Override
protected void attachBaseContext(Context newBase) {
   super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

然后使用此活动扩展您的所有活动。

答案 1 :(得分:0)

您可以为所有视图制作自定义视图。

例如。 for TextView:

 public class MyTextView extends TextView {
    private Typeface typeface;

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

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

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

    private void setCustomFont(Context ctx, AttributeSet attrs) {
        TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.app);
        String customFont = a.getString(R.styleable.app_customFont);
        setCustomFont(ctx, customFont);
        a.recycle();
    }

    private boolean setCustomFont(Context ctx, String asset) {
        try {
            if (typeface == null) {
                typeface = Typeface.createFromAsset(ctx.getAssets(),
                        getResources().getString(R.string.app_font1));
            }

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        setTypeface(typeface);
        return true;
    }   
}

在String.xml中

添加此标记 -

    <string name="app_font1">fonts/Roboto-Regular.ttf</string>

在XML文件中:

<PackageName.MyTextView
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:gravity="center"
      android:text="Hello" />