रनटाइम पर एक टेक्स्ट व्यू की शैली कैसे बदलें


98

मेरे पास एक एंड्रॉइड ऐप है, जिस पर जब उपयोगकर्ता टैप करता है TextView, तो मैं एक परिभाषित शैली लागू करना चाहता हूं।

मैंने सोचा था कि यह मिल जाएगा, textview.setStyle()लेकिन यह मौजूद नहीं है। मैंने कोशिश की

textview.setTextAppearance();

लेकिन यह काम नहीं करता है।


1
मैंने कहीं पढ़ा है कि यह संभव नहीं है ... stackoverflow.com/questions/2016249/… । लेकिन आप कुछ संपत्तियों को अलग से सेट कर सकते हैं।
22

1
क्या आपने कोशिश की: textView.setTextTypeface? developer.android.com/reference/android/widget/...
जोनाथन रोथ

21
@Falmarri क्या आपने TextView एपीआई दस्तावेजों के माध्यम से देखा है? यदि हां, तो शायद आप कुछ अधिक रचनात्मक कह सकते हैं।
फ्लेच

जवाबों:


143

मैंने res/values/style.xmlनिम्नानुसार एक नई XML फ़ाइल बनाकर ऐसा किया :

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="boldText">
        <item name="android:textStyle">bold|italic</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

    <style name="normalText">
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">#C0C0C0</item>
    </style>

</resources>

मेरे पास मेरी "strings.xml" फ़ाइल में प्रविष्टियाँ भी हैं:

<color name="highlightedTextViewColor">#000088</color>
<color name="normalTextViewColor">#000044</color>

फिर, मेरे कोड में मैंने उस पाठ दृश्य पर टैप ईवेंट को ट्रैप करने के लिए एक ClickListener बनाया: EDIT: एपीआई 23 से 'setTextAppearance' को हटा दिया गया है

    myTextView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){
                    //highlight the TextView
                    //myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    if (Build.VERSION.SDK_INT < 23) {
       myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    } else {
       myTextView.setTextAppearance(R.style.boldText);
    }
     myTextView.setBackgroundResource(R.color.highlightedTextViewColor);
                }
            });

इसे वापस बदलने के लिए, आप इसका उपयोग करेंगे:

if (Build.VERSION.SDK_INT < 23) {
    myTextView.setTextAppearance(getApplicationContext(), R.style.normalText);
} else{
   myTextView.setTextAppearance(R.style.normalText);
}
myTextView.setBackgroundResource(R.color.normalTextViewColor);

2
वास्तव में यह छाया शैलियों के साथ काम नहीं करता है। यदि आप छाया को बदलना चाहते हैं तो आपको इसे इस तरह से करना होगा: lockText.setShadowLayer (20, 4, 4, 0xFFFF0000);
लुकास

3
SDK जाँच से बचने के लिए आप TextViewCompat.setTextAppearance (myTextView, R.style.myStyle) का उपयोग कर सकते हैं;
जस्टिन फिडलर

90

जोनाथन ने सुझाव दिया, textView.setTextTypefaceकार्यों का उपयोग करते हुए , मैंने अभी कुछ सेकंड पहले एक ऐप में इसका उपयोग किया था।

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc.

9
आप textView.setTypeface (अशक्त, टाइपफेस.बॉल्ड) का उपयोग कर सकते हैं; textView..setTypeface (अशक्त, Typeface.ITALIC); textView.setTypeface (अशक्त, Typeface.BOLD_ITALIC);
Peceps

2
textView.setTypeface (अशक्त, Typeface.BOLD) मेरे लिए क्या काम किया है। बेशक, आप 1 के बजाय उपयोग कर सकते हैं, लेकिन मुझे लगता है कि मैन्युअल रूप से स्थिरांक दर्ज करना एक अच्छा अभ्यास नहीं है। पुस्तकालयों में पूर्वनिर्धारित चर का बेहतर उपयोग करें।
पीजूस

4
लोगों को स्थिरांक के बजाय
चींटियों

3
अच्छा था! मेरी गलती यह थी कि मैं अपने पुराने टाइपफेस को पहले पैरामीटर में भेज रहा था। इसलिए यह काम करता है जब मैं NORMAL बदल देता हूं -> BOLD लेकिन BOLD नहीं -> NORMAL। मुझे नहीं पता था कि पहला पैरामीटर अशक्त हो सकता है! अब यह मेरे लिए ठीक काम करता है!
फेलिप


4

प्रोग्रामेटिकली: रन टाइम

आप setTypeface () का उपयोग करके प्रोग्रामेटिक रूप से कर सकते हैं:

textView.setTypeface(null, Typeface.NORMAL);      // for Normal Text
textView.setTypeface(null, Typeface.BOLD);        // for Bold only
textView.setTypeface(null, Typeface.ITALIC);      // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic

एक्सएमएल: डिजाइन समय

आप XML में भी सेट कर सकते हैं:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

आशा है कि यह मदद करेगा

Summved


2

मैं textView.setTypeface(Typeface.DEFAULT_BOLD);सबसे सरल तरीका पाया ।


इससे टाइपफेस बदल जाता है। ओपी द्वारा निर्दिष्ट शैली नहीं
एचबीजी

सच है, अभी भी यह सबसे सरल विधि थी - और जहां तक ​​मुझे एकमात्र तरीका याद है - पोस्ट के समय। मुझे यकीन नहीं है कि इस बीच एक नया एपीआई तरीका जोड़ा गया जो टाइपफेस को बदल दिए बिना "शैली" को बोल्ड में बदलने में सक्षम बनाता है। कृपया मुझे सुधारें अगर मैं गलत हूं।
sfera

1

कोड की इस लाइन का प्रयास करें।

textview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);

यहां, यह इस टेक्स्टव्यू से वर्तमान टाइपफेस प्राप्त करेगा और नए टाइपफेस का उपयोग करके इसे बदल देगा। यहां नया टाइपफेस है, DEFAULT_BOLDलेकिन आप कई और आवेदन कर सकते हैं।


आप बल्कि यह बताएंगे कि आपका कोड उसकी समस्या का समाधान क्यों करेगा, धन्यवाद।
मुहम्मद रिफैट

ओपी स्टाइल बदलना चाहता है, टाइपफेस नहीं
एचबीजी

0

TextView http://developer.android.com/reference/android/widget//extext.html में setText () के लिए डोको देखें

अपने स्ट्रिंग्स को स्टाइल करने के लिए, android.text.style को संलग्न करें। * ऑब्जेक्ट्स को एक SpannableString में, या XML संसाधन फ़ाइल में स्वरूपित पाठ को सेट करने के उदाहरण के लिए उपलब्ध संसाधन प्रकार के दस्तावेज़ देखें।


0

आप किस शैली को सेट करना चाहते हैं इसके आधार पर, आपको विभिन्न तरीकों का उपयोग करना होगा। TextAppearance सामान का अपना सेटर है, TypeFace का अपना सेटर है, बैकग्राउंड का अपना सेटर है, आदि।

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