开发中,UI设计师为了页面好看,往往会使用一些Android系统没有的字体。这时就需要替换APP的字体。
在以前,我们会将字体复制到assets目录,然后在Application里法全局替换字体。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
initTypeface();
}
private void initTypeface() {
try {
Field field = Typeface.class.getDeclaredField("SERIF");
field.setAccessible(true);
field.set(null, Typeface.createFromAsset(getAssets(), "fonts/BingSMDL.ttf"));
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
现在,在 Android 8.0 里提供了更好的方法。
1.res目录选择新建资源目录,然后下拉框里选择font,确定
2.将字体复制到font目录下
3.style.xml 里直接设置
<item name="android:fontFamily">@font/kaiti</item>
即可,这样就可以替换全局字体
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:fontFamily">@font/kaiti</item>
</style>
当然也可以单独设置某个TextView 的字体,通过TextView的android:fontFamily
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/kaiti_bold"
android:fontFamily="@font/kaiti_bold"/>
效果如下,可以看到下面的TextView 字体变成加粗状态