जावा कोड में "android: fontFamily =" sans-serif-light "के बराबर क्या है?


106

मेरा प्रश्न काफी सरल है:

मेरे प्रत्येक टेक्स्टव्यू में, मैं वर्तमान में विशेषता का उपयोग कर रहा हूं

android:fontFamily="sans-serif-light"

पोस्ट HC उपकरणों पर एक भव्य रूप प्रदान करने के लिए।

दुर्भाग्य से, यह हर विजेट के साथ काम नहीं करता है और मेरे स्पिनरों के लिए, मुझे एडॉप्टर को अधिलेखित करने की आवश्यकता है।

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //You can use the new tf here.

    if(convertView == null || convertView.getTag() == null) {
        // new view - populate 
        convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
        convertView.setTag(new Object());
    }

    CheckedTextView spinner_text=(CheckedTextView) convertView.findViewById(android.R.id.text1);
    //Typeface should be set here...
    return spinner_text;
    }
}

तो, क्या कोड के समान परिणाम प्राप्त करने का एक तरीका है?

पुनश्च: नहीं, मैं संपत्ति फ़ोल्डर में एक टाइपफेस नहीं डालना चाहता, मैं सिर्फ सिस्टम एक का उपयोग करना चाहता हूं।

जवाबों:


168

यह संभव होना चाहिए setTypeface()और Typeface.create():

convertView.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));

डॉक्स देखें :

एक टाइपफेस ऑब्जेक्ट बनाएं, जिसमें परिवार का नाम और विकल्प शैली की जानकारी दी गई हो। यदि नाम के लिए नल पास है, तो "डिफ़ॉल्ट" फ़ॉन्ट चुना जाएगा। परिणामी टाइपफेस ऑब्जेक्ट को getStyle()"वास्तविक" शैली की विशेषताओं का पता लगाने के लिए ( ) खोज की जा सकती है ।

ध्यान दें कि अत्यधिक उपयोग Typeface.create()करना आपकी स्मृति के लिए बुरा है, जैसा कि इस टिप्पणी में कहा गया है । सुझाव Hashtable एक अच्छा समाधान है, लेकिन आप इसे एक छोटे से जब से तुम एक परिसंपत्ति से अपने टाइपफेस का निर्माण नहीं करतीं को संशोधित करने के लिए है।


2
कृपया स्मृति के मुद्दों से सावधान रहें यदि आपके पास कई स्पिनर आइटम हैं - मैंने अपना उत्तर थोड़ा अद्यतन किया।
साचोकार

44

Android 4.1 (एपीआई स्तर 16) और समर्थन लाइब्रेरी 26 और उच्चतर

यदि आप res -> फॉन्ट फ़ोल्डर का उपयोग कर रहे हैं, तो आप इस तरह का उपयोग कर सकते हैं

  val typeface = ResourcesCompat.getFont(Context, R.font.YOUR_FONT)
  TextView.setTypeface(typeface)

20

मेरी राय में अभी भी किसी भी स्मृति समस्या के बिना TextView पर प्रोग्रामेटिक रूप से सिस्टम फोंट लागू करने का एक तरीका है और यह textview.setTextAppearanceविधि का उपयोग कर रहा है:

<style name="styleA">
    <item name="android:fontFamily">sans-serif</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="styleB">
    <item name="android:fontFamily">sans-serif-light</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textColor">?android:attr/textColorTertiary</item>
</style>


if(condition){
    textView.setTextAppearance(context,R.style.styleA);
}else{
    textView.setTextAppearance(context,R.style.styleB);
}

2
android:fontFamilyएपीआई 16 की आवश्यकता है।
कूलमाइंड

2
का उपयोग करें TextViewCompat.setTextAppearance(textView, R.style.styleA)
कूलमाइंड

19

गतिशील रूप से आप फॉन्टफैमिली को एंड्रॉइड के समान सेट कर सकते हैं: इसका उपयोग करके xml में fontFamily,

For Custom font:

 TextView tv = ((TextView) v.findViewById(R.id.select_item_title));
 Typeface face=Typeface.createFromAsset(getAssets(),"fonts/mycustomfont.ttf"); 
 tv.setTypeface(face);

For Default font:

 tv.setTypeface(Typeface.create("sans-serif-medium",Typeface.NORMAL));

ये डिफ़ॉल्ट फॉन्ट परिवार की सूची है , जिसका उपयोग दोहरे उद्धरण स्ट्रिंग "सैंस-सेरिफ़-मीडियम" के स्थान पर किया जाता है।

FONT FAMILY                    TTF FILE                    

1  casual                      ComingSoon.ttf              
2  cursive                     DancingScript-Regular.ttf   
3  monospace                   DroidSansMono.ttf           
4  sans-serif                  Roboto-Regular.ttf          
5  sans-serif-black            Roboto-Black.ttf            
6  sans-serif-condensed        RobotoCondensed-Regular.ttf 
7  sans-serif-condensed-light  RobotoCondensed-Light.ttf   
8  sans-serif-light            Roboto-Light.ttf            
9  sans-serif-medium           Roboto-Medium.ttf           
10  sans-serif-smallcaps       CarroisGothicSC-Regular.ttf 
11  sans-serif-thin            Roboto-Thin.ttf             
12  serif                      NotoSerif-Regular.ttf       
13  serif-monospace            CutiveMono.ttf              

"mycustomfont.ttf" ttf फ़ाइल है। पथ में हो जाएगा src / संपत्ति / फोंट / mycustomfont.ttf , तो आप इस में डिफ़ॉल्ट फ़ॉन्ट के बारे में अधिक उल्लेख कर सकते हैं डिफ़ॉल्ट फ़ॉन्ट परिवार


13

विकल्प 1 - एपीआई 26 और उच्चतर

// Jave
Typeface typeface = getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);

// Kotlin
val typeface = resources.getFont(R.font.myfont)
textView.typeface = typeface

विकल्प 2 - एपीआई 16 और उच्चतर

// Java
Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);

// Kotlin
val typeface = ResourcesCompat.getFont(context, R.font.myfont)

एंड्रॉइड डेवलपर्स गाइड पर पूर्ण एक्सप्लोरेशन की जांच करें ।


6

यह उपयोग करके संभव होगा

setTypeface(Typeface tf, int style)TextViewकक्षा की विधि ।

spinner_text.setTypeface(Typeface.SANS_SERIF,Typeface.NORMAL);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.