2017-02-17 1 views
1

Ich möchte, dass jeder Text in der App sans-serif-thin ist, aber ich weiß nicht, wie ich es ändern soll. Ich kann android:fontFamily="sans-serif-thin" zu einem TextView hinzufügen und es funktioniert gut, aber ich möchte nicht den Code für jeden TextView in jeder Aktivität ändern müssen.Wie kann fontFamily für den gesamten Text in der App festgelegt werden?

Ich habe versucht <item name="android:fontFamily">sans-serif-thin</item> zu AppTheme Stil in styles.xml, aber ohne Wirkung hinzuzufügen.

+0

Hat das Thema angewandt? Sie können ein Theme auf die gesamte Anwendung anwenden, indem Sie 'android: theme =" @ style/AppTheme "' zum Feld '' in der Manifest.xml hinzufügen. – Jack

Antwort

2

Wie fontFamily für den gesamten Text in der App festlegen?

Lösung

Wenn Sie nur android-default-font (sans, serif, Mono) verwenden möchten.

Versuchen Sie es.

<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="android:textViewStyle">@style/MyTextViewStyle</item> 
</style> 

<style name="MyTextViewStyle" parent="android:Widget.TextView"> 
    <item name="android:fontFamily">sans-serif-thin</item> 
</style> 

Zusätzliche

Wenn Sie eine custom font als Standard-Schriftart angeben möchten, können Sie die Calligraphy Bibliothek verwenden. Diese Bibliothek bietet verschiedene Funktionen für die Schriftart.

+0

Ja, das funktioniert. 4 Minuten bis ich die Antwort annehmen kann. Das ist eine wirklich dumme Regel, jetzt muss ich für 4 Minuten rumhängen, anstatt Arbeit zu erledigen. – TimSim

0

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.

public class MyApp extends Application { 

@Override 
public void onCreate() { 
    TypefaceUtil.overrideFont(getApplicationContext(), "SERIF", "fonts/Roboto-Regular.ttf"); // font from assets: "assets/fonts/Roboto-Regular.ttf 
} 
} 

Vergessen Sie nicht, android hinzuzufügen: name = "com.you.yourapp.MyApp" in Anwendung Tag der Manifest-Datei.

in Thema hinzufügen in style.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> 

Erstellen Sie eine Klasse TypefaceUtil.java

import android.content.Context; 
import android.graphics.Typeface; 
import android.util.Log; 
import java.lang.reflect.Field; 

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("Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride); 
    } 
} 
} 
Verwandte Themen