6

पर काम नहीं करता है मैं अपने आवेदन में डिफ़ॉल्ट फ़ॉन्ट के रूप में सैन्स-सेरिफ़ लाइट सेट करना चाहता हूं। मैं एंड्रॉइड लॉलीपॉप डिवाइस पर काम कर रहा हूं।Fontfamily एंड्रॉइड लॉलीपॉप

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

जब मैं अपने डिवाइस पर अनुप्रयोग चलाने, sans-serif प्रकाश हर दृश्य में लागू नहीं किया जाता है: तो, यह मेरी styles.xml है। उदाहरण के लिए, ActivityMain.java में टेक्स्ट व्यू को फ़ॉन्ट के साथ दिखाया गया है, लेकिन अन्य गतिविधियों जैसे SecondActivity.java में सभी टेक्स्ट व्यू सामान्य रूप से दिखाई देते हैं। अगर मैं एंड्रॉइड 4.1 के साथ एक डिवाइस पर अपना ऐप चलाता हूं, तो यह हर दृश्य में काम करता है। मैं क्या गलत कर रहा हूं? अग्रिम :)

उत्तर

0

सामग्री डिज़ाइन विषय का उपयोग कर धन्यवाद आप के लिए महत्वपूर्ण नहीं है, तो आप इस का उपयोग कर सकते हैं:

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

तो सामग्री थीम का उपयोग कर अपने आवेदन के लिए महत्वपूर्ण है, तो आपको निम्न तकनीक का उपयोग कर सकते हैं :

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

अब आवेदन वर्ग में डिफ़ॉल्ट फोंट ओवरलोड

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

    FontsOverride.setDefaultFont(this, "SANS_SERIF", "sans_serif_light.ttf"); 
} 
} 
संबंधित मुद्दे