पर एक आवेदन मैं विकसित करने की आवश्यकता से, मैं FontName-नियमित, FontName-बोल्ड, FontName-यह की तरह कई फाइलों है कि एक विशिष्ट फ़ॉन्ट भेजी गई है। मुझे इसे एप्लिकेशन में सभी टेक्स्टव्यू में उपयोग करने की ज़रूरत है। सबसे पहले मैंने सोचा कि यह एक आसान काम था। अतः पर नज़र डालें और एक बहुत अच्छा धागा मिला: hereकस्टम फ़ॉन्ट्स और कस्टम TextView एंड्रॉयड
तो सबसे पहले मैं पसंद आया:
public static void overrideFonts(final Context context, final View v) {
try {
if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
overrideFonts(context, child);
}
} else if (v instanceof TextView) {
((TextView)v).setTypeface(FONT_REGULAR);
}
} catch (Exception e) {
e.printStackTrace();
// ignore
}
}
और मेरी गतिविधियों में onCreate दौरान इस विधि कहा जाता है। मेरे ऐप में प्रत्येक टेक्स्ट व्यू उस फ़ॉन्ट और लड़के को दिखा रहा था, क्या मैं इतनी आसानी से दूर होने के लिए खुश था। जब तक मुझे एक स्क्रीन नहीं मिली, जहां कुछ पाठ्यपुस्तकों को बोल्डStyle
(android:textStyle="bold"
) के रूप में आवश्यक था। तब मुझे एहसास हुआ कि यह समाधान मुझे फ़ॉन्ट-बोल्ड लोड करने की संभावना प्रदान नहीं करता है। संपत्ति से संबंधित।
से आगे देखा और एक अच्छा कस्टम TextView कार्यान्वयन देखा था, एक ही तो सवाल में:
public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyTextView(Context context) {
super(context);
init();
}
public void init() {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf");
setTypeface(tf ,1);
}
}
यह और भी बेहतर लग रहा है। मेरा सवाल है: यदि मेरे नियंत्रण में स्टाइल सेट बोल्ड है या नहीं तो मैं init()
पर कैसे पता लगा सकता हूं ताकि मैं अनुरोधित टाइपफ़ेस असाइन कर सकूं?
आपके समय के लिए धन्यवाद।
LE। नीचे दिए गए उदाहरण के बाद, मैं अपने वर्ग को नवीनीकृत किया है के रूप में:
public class MyTextView extends TextView {
Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_REGULAR);
Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_BOLD);
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTextView(Context context) {
super(context);
}
public void setTypeface(Typeface tf, int style) {
if (style == Typeface.BOLD) {
super.setTypeface(boldTypeface/*, -1*/);
} else {
super.setTypeface(normalTypeface/*, -1*/);
}
}
}
खैर अगर मैं डिबग, एप्लिकेशन setTypeFace में चला जाता है और यह बोल्ड लागू करने लगता है, लेकिन मेरे लेआउट पर मैं कोई परिवर्तन नहीं देख सकते हैं बोल्ड नहीं। कोई फर्क नहीं पड़ता कि मैं किस फ़ॉन्ट का उपयोग करता हूं, मेरे टेक्स्ट व्यू में कोई बदलाव नहीं किया जाता है और डिफ़ॉल्ट एंड्रॉइड फ़ॉन्ट के साथ प्रदर्शित होता है। मुझे आश्चर्य है क्योंकि ?
मैंने ब्लॉग पोस्ट here on my blog पर सबकुछ समझाया है, यह शायद किसी की मदद करेगा।
धन्यवाद करने के लिए विस्तृत प्रश्न और विस्तार के लिए, और महान ब्लॉग पोस्ट के लिए!मेरे लिए पूरी तरह से काम किया। मैंने उसी परिणाम के लिए बटन को भी वर्गीकृत किया। मेरी एकमात्र क्वेरी w.r.t. है createFromAsset() _every_ समय कॉल करने की क्षमता। क्या फ़ॉन्ट्स को एक बार लोड करना और उन्हें अपने एप्लिकेशन क्लास में स्टोर करना बेहतर होगा, और MyTextView.setTypeface() से इन तक पहुंचें? –
आपके शब्दों के लिए धन्यवाद। मैंने इसके बारे में भी सोचा लेकिन यह देखने के लिए परीक्षण नहीं किया कि यह कैसे काम करता है या नहीं। यह ठीक काम करना चाहिए। वैसे भी मैंने स्क्रीन पर कई विचारों के साथ प्रदर्शन का कोई जुर्माना नहीं देखा है। – Alin