6

Voglio impostare luce sans-serif come carattere predefinito nella mia applicazione. Sto lavorando su dispositivo Android Lollipop. Quindi, questo è il mio styles.xml:Fontfamily non funziona su 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> 

Quando eseguo l'applicazione sul mio dispositivo, il sans-serif-luce non viene applicata in ogni vista. Ad esempio, TextViews in ActivityMain.java viene mostrato con il carattere che desidero, ma in altre attività come SecondActivity.java tutte le TextView vengono visualizzate normalmente. Se eseguo la mia app su un dispositivo con Android 4.1, funziona in ogni vista. Che cosa sto facendo di sbagliato? Grazie in anticipo :)

risposta

0

Se si utilizza il tema Material design non è importante per voi, è possibile utilizzare questo:

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

Se si utilizza il materiale tematico è importante per la vostra applicazione, è possibile utilizzare la seguente tecnica :

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(); 
    } 
} 
} 

Ora sovraccaricare il font di default nella classe di applicazione

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

    FontsOverride.setDefaultFont(this, "SANS_SERIF", "sans_serif_light.ttf"); 
} 
} 
Problemi correlati