Android - पाठ दृश्य सेट करें


232

क्या प्रोग्रामेटिकली की textStyleविशेषता सेट करने का कोई तरीका है TextView? वहाँ एक setTextStyle()विधि नहीं है।

स्पष्ट होने के लिए, मैं दृश्य / विजेट शैलियों के बारे में बात नहीं कर रहा हूँ! मैं निम्नलिखित के बारे में बात कर रहा हूँ:

<TextView
  android:id="@+id/my_text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Hello World"
  android:textStyle="bold" />

1
आप नीचे दिए गए लिंक का संदर्भ ले सकते हैं, और शीर्ष 1 उत्तर stackoverflow.com/questions/6200533/…
Tiep

कृपया मेरे उत्तर की जाँच यहाँ करें । आशा है कि यह आपकी सहायता करेगा
जैन जैन

जवाबों:


410
textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface विशेषता टेक्स्ट स्टाइल है।

जैसा कि शंकर वी ने जोड़ा, पहले से सेट टाइपफेस विशेषताओं को संरक्षित करने के लिए आप उपयोग कर सकते हैं:

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

14
यह होना चाहिएtextview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);
शंकर वी

2
@IreEremin पहले सेट किए गए फ़ॉन्ट को संरक्षित करने के लिए जिसे आपको इस तरह से उपयोग करने की आवश्यकता है।
शंकर V

@SankarV टिप्पणी के आधार पर मेरे उत्तर का संपादन किया।
रज़

13
मुझे लगता है कि आपको DEFAULT को ढीला करना चाहिए: धारक। title.setTypeface (धारक। title.getTypeface (), Typeface.BOLD);
इमान अकबरी

दरअसल textview.getTypeface().getStyle()हैandroid:textStyle
पियरे

126

मान लीजिए कि आपके पास अपने मूल्यों / शैलियों पर एक शैली है जिसे RedHETEText कहा जाता है।

<style name="RedHUGEText" parent="@android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_size_huge</item>
    <item name="android:textColor">@color/red</item>
    <item name="android:textStyle">bold</item>
</style>

XML लेआउट / your_layout.xml फ़ाइल में हमेशा की तरह अपना TextView बनाएं, आइए बताते हैं:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" />

और अपनी गतिविधि के जावा कोड में आप ऐसा करते हैं:

TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);

यह मेरे लिए काम किया! और इसने रंग, आकार, गुरुत्वाकर्षण आदि को लागू किया है। मैंने इसे 8 से 17 तक एंड्रॉइड एपीआई लेवल वाले हैंडसेट्स और टैबलेट्स पर इस्तेमाल किया है। ध्यान दें कि Android 23 के रूप में, उस पद्धति को पदावनत कर दिया गया है। संदर्भ तर्क को हटा दिया गया है, इसलिए अंतिम पंक्ति की आवश्यकता होगी:

textViewTitle.setTextAppearance(R.style.RedHUGEText);

याद रखें ... यह केवल तभी उपयोगी है जब पाठ की शैली वास्तव में आपके जावा तर्क पर एक शर्त पर निर्भर करती है या आप यूआई "मक्खी पर" कोड के साथ बना रहे हैं ... यदि ऐसा नहीं होता है, तो यह सिर्फ बेहतर है करना:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" 
    style="@style/RedHUGEText" />

आप हमेशा इसे अपना रास्ता बना सकते हैं!


4
यह केवल विशेषताओं का एक सबसेट सेट करेगा जिसे एक <style>टैग में परिभाषित किया जा सकता है । यह आम लोगों (आकार, रंग, शैली) करता है, लेकिन दूसरों को लागू नहीं करता है (पैडिंग, पृष्ठभूमि, गुरुत्वाकर्षण, आदि सहित)
karl

5
मिन एपीआई 23 की आवश्यकता होती है?
विलियम टी। मलार्ड

4
दो तरीके हैं, एक के लिए एपीआई <23, और एक के लिए एपीआई 23+। वे समान दिखाई देते हैं सिवाय एक के लिए <23 एक संदर्भ तर्क लेता है और 23 के लिए एक नहीं करता है। हुड के तहत, एपीआई 23+ के लिए एक <23 के लिए विधि कहता है और टेक्स्टव्यू के लिए सदस्य संदर्भ का उपयोग करता है।
MrPlow

63

setTextAppearanceया भी खोजें setTextTypefaceस्टैकओवरफ़्लो पर इसी तरह का सवाल है: रनटाइम पर टेक्स्ट व्यू की शैली कैसे बदलें


setTextAppearance अप्रीकृत स्तर 23
एथोसॉपी

एपीआई 23+ के लिए एक नया तरीका है जो सिर्फ एक संदर्भ तर्क नहीं लेता है।
MrPlow

52

इस कार्य को प्राप्त करने के लिए कुछ तरीके निम्न हैं: -

1।

String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!";
TextView tv = (TextView)findViewById(R.id.ur_text_view_id);
tv.setText(Html.fromHtml(text_view_str));

2।

tv.setTypeface(null, Typeface.BOLD);
tv.setTypeface(null, Typeface.ITALIC);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
tv.setTypeface(null, Typeface.NORMAL);

3।

SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 
                         0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);

4।

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

 tv.setTextAppearance(getApplicationContext(), R.style.boldText);

या यदि आप xml के माध्यम से चाहते हैं

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

setTextAppearance () उत्तर है जो मैं अपने XML में परिभाषित कस्टम शैली लागू करने के लिए था। धन्यवाद।
अशरीओ

मेरी राय में, यह धागे के लिए सबसे अच्छा जवाब है। प्रोग्राम के लिए कई विकल्प कोड में कॉल करते हैं
गुयेन मिन्ह हिएन

9

Kotlin Version

पाठ शैली के अतिरिक्त वर्तमान फ़ॉन्ट को बनाए रखने के लिए:

textView.apply {
    setTypeface(typeface, Typeface.NORMAL)
    // or
    setTypeface(typeface, Typeface.BOLD)
    // or
    setTypeface(typeface, Typeface.ITALIC)
    // or
    setTypeface(typeface, Typeface.BOLD_ITALIC)
}

7

यह सवाल कई जगहों पर बहुत अलग तरीकों से पूछा जाता है। मैंने मूल रूप से इसका उत्तर यहां दिया था, लेकिन मुझे लगता है कि यह इस धागे में भी प्रासंगिक है (जब से मैं एक उत्तर के लिए खोज कर रहा था तब से यहां समाप्त हो गया )।

इस समस्या का कोई एक समाधान नहीं है, लेकिन इसने मेरे उपयोग के मामले में काम किया। समस्या यह है, 'व्यू (संदर्भ, अटार्स, डिफॉल्टल)' कंस्ट्रक्टर वास्तविक शैली को संदर्भित नहीं करता है, यह एक विशेषता चाहता है। तो, हम करेंगे:

  1. एक विशेषता को परिभाषित करें
  2. एक शैली बनाएं जिसका आप उपयोग करना चाहते हैं
  3. हमारे विषय पर उस विशेषता के लिए एक शैली लागू करें
  4. उस विशेषता के साथ हमारे विचार के नए उदाहरण बनाएँ

'Res / मान / attrs.xml' में, एक नई विशेषता को परिभाषित करें:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="customTextViewStyle" format="reference"/>
    ...
</resources>    

Res / मान / स्टाइल में। xml 'मैं अपने कस्टम टेक्स्ट व्यू पर जिस शैली का उपयोग करना चाहता हूं, उसे बनाने जा रहा हूं

<style name="CustomTextView">
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:paddingLeft">14dp</item>
</style>

'रेस / वैल्यू / थीम.एक्सएमएल' या 'रेस / वैल्यू / स्टाइल.एक्सएमएल' में, अपने एप्लिकेशन / गतिविधि के लिए थीम को संशोधित करें और निम्नलिखित स्टाइल जोड़ें:

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <item name="@attr/customTextViewStyle">@style/CustomTextView</item>
    </style>
    ... 
</resources>

अंत में, अपने कस्टम टेक्स्ट व्यू में, अब आप कंस्ट्रक्टर को विशेषता के साथ उपयोग कर सकते हैं और यह आपकी शैली को प्राप्त करेगा

public class CustomTextView extends TextView {

    public CustomTextView(Context context) {
       super(context, null, R.attr.customTextView);
    }
}

यह ध्यान देने योग्य है कि मैंने बार-बार अलग-अलग वेरिएंट और अलग-अलग जगहों पर customTextView का उपयोग किया है, लेकिन यह किसी भी तरह से आवश्यक नहीं है कि दृश्य का नाम शैली या विशेषता या किसी भी चीज़ से मेल खाता हो। इसके अलावा, इस तकनीक को किसी भी कस्टम दृश्य के साथ काम करना चाहिए, न कि केवल TextViews।


5

इसने मेरे लिए काम किया

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

या

textview.setTypeface(Typeface.DEFAULT_BOLD);

2

Ive ने इसे दो सरल तरीकों से हल किया।

स्पष्टीकरण का पालन करें।

मेरी मौजूदा शैली घोषणा:

<style name="SearchInfoText">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">24sp</item>
    <item name="android:textColor">@color/Church_Grey</item>
    <item name="android:shadowColor">@color/Shadow_Church</item>
    <item name="android:shadowRadius">3</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
</style>

मेरा Android जावा कोड:

    TextView locationName = new TextView(getSupportActivity());
    locationName.setId(IdGenerator.generateViewId());
    locationName.setText(location.getName());
    locationName.setLayoutParams(super.centerHorizontal());
    locationName.setTextSize(24f);
    locationName.setPadding(0, 0, 0, 15);
    locationName.setTextColor(getResources().getColor(R.color.Church_Grey));
    locationName.setShadowLayer(3, 1, 1,  getResources().getColor(R.color.Shadow_Church));

सादर।


0

आप यह कोशिश कर सकते हैं

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                textView.setTextAppearance(R.style.Lato_Bold);
            } else {
                textView.setTextAppearance(getActivity(), R.style.Lato_Bold);
            }

0

चूंकि setTextAppearance(resId)केवल एपीआई 23 और इसके बाद के संस्करण के लिए उपलब्ध है, उपयोग करें:

TextViewCompat.setTextAppearance(textViewGoesHere, resId)

इस विधि को आंतरिक रूप से इस प्रकार लागू किया गया है:

public static void setTextAppearance(@NonNull TextView textView, @StyleRes int resId) {
    if (Build.VERSION.SDK_INT >= 23) {
        textView.setTextAppearance(resId);
    } else {
        textView.setTextAppearance(textView.getContext(), resId);
    }
}

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