6

Ich möchte Sans-Serif-Licht als Standardschrift in meiner Anwendung festlegen. Ich arbeite an Android Lollipop Gerät. Also, das ist mein styles.xml:Fontfamily funktioniert nicht auf Android Lollipop

<resources> 

    <style name="AppBaseTheme" parent="android:Theme.Material.Light.DarkActionBar"> 

    </style> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
     <item name="android:textViewStyle">@style/RobotoTextViewStyle</item> 
     <item name="android:buttonStyle">@style/RobotoButtonStyle</item> 


    </style> 

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

    <style name="RobotoButtonStyle" parent="android:Widget.Button"> 
     <item name="android:fontFamily">sans-serif-light</item> 
    </style> 

</resources> 

Als ich die App auf meinem Gerät funktionieren, das sans-serif-Licht nicht in jeder Ansicht angewandt wird. Zum Beispiel werden TextViews in ActivityMain.java mit der gewünschten Schriftart angezeigt, in anderen wie SecondActivity.java erscheinen jedoch alle TextViews normal. Wenn ich meine App auf einem Gerät mit Android 4.1 ausführe, funktioniert es in jeder Ansicht. Was mache ich falsch? Vielen Dank im Voraus :)

Antwort

0

Wenn das Material Design-Thema verwendet, ist nicht wichtig für Sie, können Sie diese verwenden:

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
<item name="android:typeface">sans-serif-light</item> 
</style> 

Wenn das Material Theme mit für Ihre Anwendung wichtig ist, können Sie die folgende Technik verwenden :

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

public final class FontsOverride { 

public static void setDefaultFont(Context context, 
     String staticTypefaceFieldName, String fontAssetName) { 
    final Typeface regular = Typeface.createFromAsset(context.getAssets(), 
      fontAssetName); 
    replaceFont(staticTypefaceFieldName, regular); 
} 

protected static void replaceFont(String staticTypefaceFieldName, 
     final Typeface newTypeface) { 
    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(); 
    } 
} 
} 

nun die Standard-Schriftarten in der Anwendungsklasse überlasten

public final class Application extends android.app.Application { 
@Override 
public void onCreate() { 
    super.onCreate(); 

    FontsOverride.setDefaultFont(this, "SANS_SERIF", "sans_serif_light.ttf"); 
} 
} 
Verwandte Themen