我在我的应用程序中使用Roboto light字体。要设置字体,我必须添加android:fontFamily="sans-serif-light"到每个视图。有什么方法来声明Roboto字体作为默认字体家族整个应用程序?我试过这样做,但似乎不管用。
<style name="AppBaseTheme" parent="android:Theme.Light"></style>
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:fontFamily">sans-serif-light</item>
</style>
这在Android Studio中非常非常简单。
在这个方法中,你需要验证你的minsdkverison。minsdkversion >=16
在“res”文件夹中创建“font”文件夹。在android studio中新建>文件夹>字体文件夹。
将您的字体文件上传到该字体文件夹。
在你的style.xml文件中,在“Base application theme”的style下添加这一行。
<项目名称= " android: fontFamily " > @font / ubuntubold > < /项目
更多的细节:
https://coderog.com/community/threads/how-to-set-default-font-family-for-entire-android-app.72/
不谈性能,对于自定义字体,你可以有一个递归方法循环通过所有的视图和设置字体,如果它是一个TextView:
public class Font {
public static void setAllTextView(ViewGroup parent) {
for (int i = parent.getChildCount() - 1; i >= 0; i--) {
final View child = parent.getChildAt(i);
if (child instanceof ViewGroup) {
setAllTextView((ViewGroup) child);
} else if (child instanceof TextView) {
((TextView) child).setTypeface(getFont());
}
}
}
public static Typeface getFont() {
return Typeface.createFromAsset(YourApplicationContext.getInstance().getAssets(), "fonts/whateverfont.ttf");
}
}
在你的所有活动中,在setContentView之后将当前ViewGroup传递给它,就完成了:
ViewGroup group = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content);
Font.setAllTextView(group);
对于片段,也可以做类似的事情。