Android में स्ट्रिंग के एक शब्द। Xml


114

मेरे पास स्ट्रिंग्स.xml में से एक में एक लंबा पाठ है। मैं बोल्ड बनाना चाहता हूं और उस पाठ में कुछ शब्दों का रंग बदलना चाहता हूं।

मैं यह कैसे कर सकता हूं?


क्या आप समग्र रूप से जो हासिल करने की कोशिश कर रहे हैं, उसके संदर्भ में आप कुछ अधिक विशिष्ट हो सकते हैं?
ब्रायन

जवाबों:


192

आप मूल रूप से अपने स्ट्रिंग संसाधन में html टैग का उपयोग कर सकते हैं जैसे:

<resource>
    <string name="styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string>
</resources>

और Html.fromHtml का उपयोग करें या spannable का उपयोग करें, मेरे द्वारा पोस्ट किए गए लिंक की जांच करें।

पुराने समान प्रश्न: क्या एक TextView के अंदर कई शैलियों का होना संभव है?


16
इसके अलावा, आप अपने संसाधन स्ट्रिंग का उपयोग कैसे करते हैं, इसके आधार पर आपको CDATA ब्लॉक में बोल्ड / इटैलिक टैग लगाने की आवश्यकता हो सकती है ताकि वे तब तक पार्स न हों जब तक कि इसका उपयोग न किया जाए Html.fromHtml(): <![CDATA[<b><i>so</i></b>]]>...
dule

133
किसी और के लिए, जिसने आधिकारिक एंड्रॉइड प्रलेखन को इस पर बहुत अस्पष्ट पाया: यदि आप अपने स्ट्रिंग संसाधन में <b> जैसे टैग का उपयोग करते हैं, तो सुनिश्चित करें कि आप इसके getText(R.string.whatever)बजाय का उपयोग करके इसे पुनः प्राप्त करते हैंgetString(R.string.whatever)
andygeers

1
क्या nameइसके बजाय ऐसा नहीं होना चाहिए id?
हेंड एंगरियन

4
तो कोई के लिए की जरूरत है Html.fromHtmlया Spannable। सिर्फ getText(R.string.whatever)@ कैंडीजर्स की तरह इस्तेमाल किया गया है।
अलाया एम।

1
@ कैंडीज हम "मेरा नाम <b>% s </ b>" जैसे स्ट्रिंग के लिए क्या कर सकते हैं जो गेटटेक्स्ट का उपयोग नहीं कर सकता क्योंकि यह केवल एक पैरामीटर को स्वीकार करता है?
टेलर

45

स्ट्रिंग संसाधनों के अंदर html टैग का उपयोग करें: -

<resources>
<string name="string_resource_name"><![CDATA[<b> Your text </b>]]> </string>
</resources>

और स्ट्रिंग संसाधनों से बोल्ड टेक्स्ट प्राप्त करें जैसे: -

private Spanned getSpannedText(String text) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT);
        } else {
            return Html.fromHtml(text);
        }
    }


 String s = format(context.getResources().getString(R.string.string_resource_name));
 textView.setText(getSpannedText(s));

यह सबसे अच्छा जवाब है और यह पूरी तरह से उन लोगों के लिए काम करता है जो @BindingAdapter का उपयोग करते हैं। धन्यवाद भाई।
Sup.Ia

44

जैसा कि डेविड ओल्सन ने कहा है, आप अपने स्ट्रिंग संसाधनों में HTML का उपयोग कर सकते हैं:

<resource>
    <string name="my_string">A string with <i>actual</i> <b>formatting</b>!</string>
</resources>

तो अगर आप का उपयोग getText(R.string.my_string)करने के बजाय getString(R.string.my_string)आप एक वापस पाने के CharSequenceबजाय एक से Stringस्वरूपण एम्बेडेड मौजूद है।


getText रिटर्न CharSequence नहीं एक Spannable
Tigran Babajanyan

1
क्या होगा यदि आपकी स्ट्रिंग एक मात्रा है जिसे आपको एक संख्या जोड़ने की आवश्यकता है?
टेलर


10

कोटलिन में, आप संसाधनों पर गतिविधियों के कार्य (गतिविधियाँ | टुकड़े | संदर्भ) बना सकते हैं, जो आपके स्ट्रिंग को html स्पैन में बदल देगा

जैसे

fun Resources.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Resources.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Resources.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = getQuantityString(id, quantity).toHtmlSpan()

fun Resources.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = getQuantityString(id, quantity, *formatArgs).toHtmlSpan()

fun String.toHtmlSpan(): Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
    Html.fromHtml(this)
}

प्रयोग

//your strings.xml
<string name="greeting"><![CDATA[<b>Hello %s!</b><br>]]>This is newline</string>

//in your fragment or activity
resources.getHtmlSpannedString(R.string.greeting, "World")

EDIT और भी अधिक एक्सटेंशन

fun Context.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Context.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Context.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Context.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()


fun Activity.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Activity.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Activity.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Activity.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()


fun Fragment.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Fragment.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()

@ हिमांशु मोरी कुछ स्निपेट मदद करेंगे। क्या आप इसे कोटलिन वर्ग में उपयोग कर रहे हैं?
२१

1
गतिविधि विस्तार आवश्यक नहीं है, गतिविधि स्वयं प्रसंग है
फ़ारशाद तहमासी

2

strings.xml

<string name="my_text"><Data><![CDATA[<b>Well Done !</b><br></br>All of your activities are completed.<br></br>You may now close the app.<br></br>See you again next time.]]></Data></string>

स्थापित करना

textView.setText(Html.fromHtml(getString(R.string.activity_completed_text)));

1

आप इसे स्ट्रिंग से कर सकते हैं

 <resources xmlns:tools="http://schemas.android.com/tools">

 <string name="total_review"><b>Total Review: </b> </string>

 </resources>

और जैसे जावा कोड से इसे एक्सेस कर सकते हैं

proDuctReviewNumber.setText(getResources().getString(R.string.total_review)+productDetailsSuccess.getProductTotalReview());

1

strings.xml

<string name="sentence">This price is <b>%1$s</b> USD</string>

page.java

String successMessage = getString(R.string.message,"5.21");

यह कीमत 5.21 USD


1
आपको गुजरने वाले मापदंडों के लिए मूल कार्यक्षमता का उपयोग करना चाहिए। बस "{1}" के बजाय "% 1 $ s" रखें, और कॉल गेटस्ट्रिंग (R.string.message, "5.21") को बिना
बदले

डॉक्स इस उत्तर का समर्थन करते हैं: developer.android.com/guide/topics/resources/… हालांकि इसे HTML पार्सर के माध्यम से पारित करने की आवश्यकता है
ProjectDelta
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.