Android TextView में फ़ॉन्ट शैली को बोल्ड, इटैलिक और रेखांकित करने के लिए कैसे सेट करें?


450

मैं TextViewसामग्री को बोल्ड, इटैलिक और रेखांकित करना चाहता हूं । मैंने निम्न कोड की कोशिश की और यह काम करता है, लेकिन रेखांकित नहीं करता है।

<Textview android:textStyle="bold|italic" ..

मैं यह कैसे करुं? कोई त्वरित विचार?


क्या यह उनमें से सिर्फ एक को सेट करने के लिए काम करता है?
फाल्स्ट्रो

हाँ काम ठीक है मैं भी इसे लाइन के तहत बनाना चाहता हूँ।
डी-मैन d ’

6
textView.setPaintFlags (Paint.UNDERLINE_TEXT_FLAG);
bCliks

15
tv.setTypeface(null, Typeface.BOLD_ITALIC);

3
Android TextView को बोल्ड करने के 4 तरीके मुझे लगता है कि आपको यह लेख पढ़ना चाहिए।
c49

जवाबों:


279

मैं अंडरलाइन के बारे में नहीं जानता, लेकिन बोल्ड और इटैलिक के लिए है "bolditalic"। यहाँ अंडरलाइन का कोई उल्लेख नहीं है: http://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle

आप का मन करता है कि जिस उल्लेख का उपयोग करने की bolditalicआवश्यकता हो, और मैं उस पृष्ठ से उद्धृत करूं

निम्नलिखित स्थिर मूल्यों में से एक या एक से अधिक ('|') से अलग होना चाहिए।

तो आप उपयोग करेंगे bold|italic

आप इस प्रश्न को अंडरलाइन कर सकते हैं : क्या मैं एंड्रॉइड लेआउट में टेक्स्ट को रेखांकित कर सकता हूं?


48
अंडर लाइन के लिए .. textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
bCliks

1
@बाला को पता है कि आपका समाधान हमेशा पूरे पाठ को रेखांकित करता है, इसलिए यह उन मामलों में संभव नहीं है जब कोई इसके एक हिस्से को रेखांकित करना चाहता है।
Giulio Piancastelli

362

यह एक ही समय में आपके TextView को बोल्ड , रेखांकित और इटैलिक बनाना चाहिए ।

strings.xml

<resources>
    <string name="register"><u><b><i>Copyright</i></b></u></string>
</resources>

इस स्ट्रिंग को अपने TextView पर सेट करने के लिए, इसे अपने main.xml में करें

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/register" />

या जावा में ,

TextView textView = new TextView(this);
textView.setText(R.string.register);

जब आप डायनामिक टेक्स्ट का उपयोग कर सकते हैं तो कभी-कभी उपरोक्त दृष्टिकोण सहायक नहीं होगा। तो उस स्थिति में SpannableString कार्रवाई में आता है।

String tempString="Copyright";
TextView text=(TextView)findViewById(R.id.text);
SpannableString spanString = new SpannableString(tempString);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0, spanString.length(), 0);
text.setText(spanString);

आउटपुट

यहां छवि विवरण दर्ज करें


3
मैंने इसे 2.1 में जांचा। तो कम से कम यह 2.1 और इसके बाद के संस्करण से काम करना चाहिए
एंड्रो सेल्वा

का उपयोग करने पर विचार कर सकते हैंnew StyleSpan(Typeface.BOLD_ITALIC)
चोक यान चेंग जूल

यह डायनामिक कॉन्टेनेटेड स्ट्रिंग पर काम क्यों नहीं कर रहा है? यह वायर्ड है कि कुछ संख्याएँ दिखाई दीं ....
22

152

या कोटलिन में इस तरह:

val tv = findViewById(R.id.textViewOne) as TextView
tv.setTypeface(null, Typeface.BOLD_ITALIC)
// OR
tv.setTypeface(null, Typeface.BOLD or Typeface.ITALIC)
// OR
tv.setTypeface(null, Typeface.BOLD)
// OR
tv.setTypeface(null, Typeface.ITALIC)
// AND
tv.paintFlags = tv.paintFlags or Paint.UNDERLINE_TEXT_FLAG

या जावा में:

TextView tv = (TextView)findViewById(R.id.textViewOne);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
// OR
tv.setTypeface(null, Typeface.BOLD|Typeface.ITALIC);
// OR
tv.setTypeface(null, Typeface.BOLD);
// OR
tv.setTypeface(null, Typeface.ITALIC);
// AND
tv.setPaintFlags(tv.getPaintFlags()|Paint.UNDERLINE_TEXT_FLAG);

इसे सरल और एक पंक्ति में रखें :)


1
आप जिस दृश्य के साथ काम कर रहे हैं, उसके लिए kotlinx.android.synthetic पैकेज को सम्मिलित करके, कोटलिन में findViewByID आवश्यक नहीं है, प्रत्येक सेटटाइपफेस लाइनों को बना रहा है: textViewOne.setTypeface (...)
cren90

है paintFlagsआवश्यक? यह उसके बिना काम कर रहा है
Prbs

75

बोल्ड और इटैलिक के लिए आप जो कुछ भी कर रहे हैं वह कोड के बाद अंडरस्कोर उपयोग के लिए सही है

HelloAndroid.java

 package com.example.helloandroid;

 import android.app.Activity;
 import android.os.Bundle;
 import android.text.SpannableString;
 import android.text.style.UnderlineSpan;
import android.widget.TextView;

public class HelloAndroid extends Activity {
TextView textview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textview = (TextView)findViewById(R.id.textview);
    SpannableString content = new SpannableString(getText(R.string.hello));
    content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
    textview.setText(content);
}
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"
android:textStyle="bold|italic"/>

string.xml

<?xml version="1.0" encoding="utf-8"?>
 <resources>
  <string name="hello">Hello World, HelloAndroid!</string>
  <string name="app_name">Hello, Android</string>
</resources>

निम्नलिखित के underlineबजाय पास शून्य मान को हटाने के लिएnew UnderlineSpan()content.setSpan(null, 0, content.length(), 0);
सामी एल्तामावी

47

यह अन्य सेटिंग्स को बनाए रखते हुए एक अंडरलाइन जोड़ने का आसान तरीका है:

textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

विदित हो कि यह समाधान हमेशा पूरे पाठ को रेखांकित करता है, इसलिए यह उन मामलों में संभव नहीं है जब कोई इसके एक हिस्से को रेखांकित करना चाहता है।
Giulio Piancastelli

42

Programmatialy:

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

और यदि आप कस्टम टाइपफेस सेट करना चाहते हैं:

textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);      // for Normal Text
textView.setTypeface(textView.getTypeface(), Typeface.BOLD);        // for Bold only
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);      // for Italic
textView.setTypeface(textView.getTypeface(), 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"

मैं सेट परिवार का उपयोग करके फ़ॉन्ट परिवार कैसे बदल सकता हूं, बोल्ड, इटैलिक, अंडरलाइन भी लागू कर सकता है।
प्रिंस

@DPrince यहाँ पर देखें stackoverflow.com/questions/12128331/…
किंग ऑफ मास

23

यदि आप एक फ़ाइल या नेटवर्क से उस पाठ को पढ़ रहे हैं।

आप अपने पाठ में HTML टैग जोड़कर इसे प्राप्त कर सकते हैं जैसे कि उल्लेख किया गया है

This text is <i>italic</i> and <b>bold</b>
and <u>underlined</u> <b><i><u>bolditalicunderlined</u></b></i>

और फिर आप HTML क्लास का उपयोग कर सकते हैं जो HTML स्ट्रिंग्स को डिस्प्ले करने योग्य स्टाइल टेक्स्ट में प्रोसेस करता है।

// textString is the String after you retrieve it from the file
textView.setText(Html.fromHtml(textString));

एपीआई स्तर 24 में एचटीएचटीएमएल (स्ट्रिंग) विधि को पदावनत किया गया था: यहाँ अधिक चर्चा: stackoverflow.com/questions/37904739/…
पावेल बिरुकोव

20

उद्धरण के बिना मेरे लिए काम करता है:

<item name="android:textStyle">bold|italic</item>

5
    style="?android:attr/listSeparatorTextViewStyle
  • इस शैली को बनाकर, आप अंडरलाइनिंग को प्राप्त कर सकते हैं


3

आप buildSpannedString{}अपनी core-ktxनिर्भरता के तहत कोटलिन का उपयोग करके इसे आसानी से प्राप्त कर सकते हैं ।

val formattedString = buildSpannedString {
    append("Regular")
    bold { append("Bold") }
    italic { append("Italic") }
    underline { append("Underline") }
    bold { italic {append("Bold Italic")} }
}

textView.text = formattedString

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