6

Uygulamamda sans-serif ışığı varsayılan yazı tipi olarak ayarlamak istiyorum. Android Lollipop cihazında çalışıyorum. Benim uygulamayı cihazınıza çalıştırdığınızda, sans-serif ışık her görünümdeFontfamily, Android Lollipop'ta çalışmıyor

<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> 

uygulanmaz: Yani, bu benim styles.xml olduğunu. Örneğin, ActivityMain.java'daki TextViews, istediğim fontla gösterilir, ancak SecondActivity.java gibi aktivitelerde tüm TextViews normal olarak görünür. Uygulamamı Android 4.1 ile bir cihazda çalıştırırsam, her görünümde çalışır. Neyi yanlış yapıyorum?

cevap

0

Materyal Tasarımı tema kullanılıyorsa peşin :) teşekkürler sizin için önemli değildir, bu kullanabilirsiniz:

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

Malzeme Tema kullanarak uygulamanız için önemli ise, aşağıdaki tekniği kullanabilirsiniz :

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

Şimdi uygulama sınıfında varsayılan fontları aşırı

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

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