基础配置:
添加 字体资源STXINGKA.TTF 到app/src/main/assets/fonts/STXINGKA.TTF
在项目build.gradle下添加艺术字依赖库
//Calligraphy 字体库/书法 implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
两种方法:
第一种:
自定义控件
public class MyTextView extends TextView{
public MyTextView(Context context) {
super(context);
init(context);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public void init(Context context) {
Typeface newFont = Typeface.createFromAsset(context.getAssets(), "fonts/STXINGKA.TTF");
setTypeface(newFont);
}
}
第二种Activity:
第三种Application:
在基类 继承Activity中设置
在基类 继承Application的类中写
个人认为只在Activity中即可,
原因:字作为UI控件的一部分在布局文件中显示,也就是说只与Activity和Fragment相关,而Fragment是依赖于Activity存在的,所以不需要再在Fragment中定义字体
public class MyBaseFontActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myFont();
}
/**
* 自定义字体
* */
private void myFont() {
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/MFShangHei_Noncommercial-Regular.otf")
.setFontAttrId(R.attr.fontPath)
.build());
}
/**
* 自定义字体时重载此方法
*/
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
}
*注:必须重写 attachBaseContext方法