Wenn Sie eine Schriftart für alle TextViews in Android-Anwendung festlegen müssen, können Sie diese Lösung verwenden. Es überschreibt ALLE TextView-Schriftarten, enthält eine Aktionsleiste und andere Standardkomponenten, aber die Passwortschriftart von EditText wird nicht überschrieben.
MyApp.java
public class MyApp extends Application {
@Override
public void onCreate()
{
TypefaceUtil.overrideFont(getApplicationContext(), "SERIF", "fonts/Roboto-Regular.ttf");
}
}
TypefaceUtil.java
public class TypefaceUtil {
/**
* Using reflection to override default typeface
* NOTICE: DO NOT FORGET TO SET TYPEFACE FOR APP THEME AS DEFAULT TYPEFACE WHICH WILL BE OVERRIDDEN
* @param context to work with assets
* @param defaultFontNameToOverride for example "monospace"
* @param customFontFileNameInAssets file name of the font from assets
*/
public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
try {
final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);
final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
defaultFontTypefaceField.setAccessible(true);
defaultFontTypefaceField.set(null, customFontTypeface);
} catch (Exception e) {
Log.e("TypefaceUtil","Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
}
}
}
themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyAppTheme" parent="@android:style/Theme.Holo.Light">
<!-- you should set typeface which you want to override with TypefaceUtil -->
<item name="android:typeface">serif</item>
</style>
</resources>
Update für Android 5.0 oder höher
Wie ich untersucht und getestet auf dem Gerät läuft api 5.0 oder höher diese Lösung funktioniert gut, weil ich die einzige style.xml Datei verwende und nicht andere style.xml machen in Werte-21 Ordner
Obwohl Einige Benutzer fragen mich, dass diese Lösung nicht mit Android 5.0-Gerät funktioniert (sie verwenden Werte-21 style.xml ich denke)
Also das ist, weil unter API 21 die meisten der Texte Stile fontFamily Einstellung, wie
<item name="fontFamily">@string/font_family_body_1_material</item>
, die den Standard-Roboto Regular applys:
<string name="font_family_body_1_material">sans-serif</string>
So ist die beste Lösung ist
Wenn einer mit Problem nicht für 5.0+ arbeiten. Überschreiben Sie die Schriftart in Ihren v21-Werten nicht.
Überschreibe einfach die Schriftart in Werten/Stil.xml und Sie werden gut zu gehen :)
Aktivieren Sie diese bitte http://stackoverflow.com/questions/6926263/add-custom-font-for -complete-android-application und http://stackoverflow.com/questions/9327053/using-custom-font-in-android-textview-using-xml –
Hi @MichelReap kannst du bitte meine Antwort als akzeptiert markieren, wenn sie gelöst ist Ihr Problem ... –