1
使用以下代碼覆蓋應用程序中的字體,但ActionBar和Buttons忽略它。其餘的(TextViews和EditTexts工作正常)。我正在使用AppCompat庫。提前感謝您的幫助。按鈕和ActionBar忽略應用程序中定義的自定義字體
@Override
public void onCreate() {
super.onCreate();
final Typeface regular = Typeface.createFromAsset(getAssets(),"fonts/avenir.ttc");
replaceFont(Typeface.defaultFromStyle(R.style.AppTheme).toString(), regular);
replaceFont("DEFAULT", regular);
}
protected static void replaceFont(String staticTypefaceFieldName,
final Typeface newTypeface) {
if (Build.VERSION.SDK_INT >= 21) {
Map<String, Typeface> newMap = new HashMap<String, Typeface>();
newMap.put("sans-serif", newTypeface);
try {
final Field staticField = Typeface.class
.getDeclaredField("sSystemFontMap");
staticField.setAccessible(true);
staticField.set(null, newMap);
Field sDefaults = Typeface.class.getDeclaredField("sDefaults");
sDefaults.setAccessible(true);
sDefaults.set(null, new Typeface[]{
newTypeface, newTypeface, newTypeface, newTypeface
});
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else {
try {
final Field staticField = Typeface.class
.getDeclaredField(staticTypefaceFieldName);
staticField.setAccessible(true);
staticField.set(null, newTypeface);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
將是巨大的,如果有人解釋它是如何工作的。 (我猜問題是Buttons和ActionBar不會繼承某些類,字體被覆蓋)。謝謝。 – Kan