एंड्रॉइड में Html.fromHtml () का उपयोग करके टेक्स्ट कलर हाइलाइट करना?


84

मैं एक एप्लिकेशन विकसित कर रहा हूं जिसमें एक खोज स्क्रीन होगी जहां उपयोगकर्ता विशिष्ट कीवर्ड खोज सकता है और उस कीवर्ड को हाइलाइट किया जाना चाहिए। मुझे Html.fromHtml विधि मिली है।

लेकिन मैं यह जानना चाहूंगा कि क्या इसे करने का उचित तरीका है या नहीं।

कृपया मुझे इस पर अपने विचार बताएं।


एक कार्य उदाहरण के लिए देखें। javatechig.com/2013/04/07/how-to-display-html-in-android-view
नीलांचल

जवाबों:


197

या Spannableमैन्युअल रूप से निपटने की तुलना में कहीं अधिक सरल , क्योंकि आपने यह नहीं कहा कि आप पृष्ठभूमि को हाइलाइट करना चाहते हैं, बस पाठ:

String styledText = "This is <font color='red'>simple</font>.";
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);

8
यह ध्यान देने योग्य है, कि Html.fromHtml SpannableString की तुलना में धीमी है, क्योंकि इसमें पार्सिंग शामिल है। लेकिन एक छोटे पाठ के लिए यह कोई मायने नहीं रखता है
मचोल के

लिंक पर एक और समाधान प्रतीत होता है । किंवदंती द्वारा उत्तर देखें।
केनेथ इवांस

1
एक टिप्पणी के रूप में, मैंने पाया कि मुझे TextView.BufferType.SPANNABLE को पास करने की आवश्यकता नहीं है और यह अभी भी काम कर रहा है। धन्यवाद!
जेम्स

क्या आप Android के लिए लंबे पाठ को गिरफ्तार करने के लिए किसी भी html संपादक को जानते हैं। उदाहरण के लिए मैं इस साइट ( html.am/html-editors/html-text-editor.cfm ) का उपयोग करने की कोशिश कर रहा हूं, लेकिन अगर मैं स्रोत को देखना चाहता हूं तो यह रंग को लौटाता है <span style="color:#ff0000;">ताकि एंड्रॉइड रंग न बदले।
mehmet

@mehmet आप संभवतः "रंग" विशेषता के साथ <span> टैग को <font> टैग में बदलने के लिए बस खोज और बदल सकते हैं।
क्रिस्टोफर ओर

35

Xml संसाधन से रंग मान का उपयोग करना:

int labelColor = getResources().getColor(R.color.label_color);
String сolorString = String.format("%X", labelColor).substring(2); // !!strip alpha value!!

Html.fromHtml(String.format("<font color=\"#%s\">text</font>", сolorString), TextView.BufferType.SPANNABLE); 

अच्छी तरह से किया। अपने एप्लिकेशन संसाधनों से रंगों का उपयोग करने में सक्षम होने के लिए उपयोगी है।
स्पीडिनोमैड्स

मैं दूसरी पंक्ति पर जोर देना चाहता हूं, जहां आप रंग हेक्स को प्रतिस्थापित करते हैं: अल्फा मान रंग सेटिंग को अमान्य बना देगा! इसे मत भूलना!
मार्कोव

12

यह एक स्पैनिंगेबल स्ट्रिंग का उपयोग करके प्राप्त किया जा सकता है। आपको निम्नलिखित आयात करने की आवश्यकता होगी

import android.text.SpannableString; 
import android.text.style.BackgroundColorSpan; 
import android.text.style.StyleSpan;

और फिर आप निम्न की तरह कुछ का उपयोग करके पाठ की पृष्ठभूमि बदल सकते हैं:

TextView text = (TextView) findViewById(R.id.text_login);
text.setText("");
text.append("Add all your funky text in here");
Spannable sText = (Spannable) text.getText();
sText.setSpan(new BackgroundColorSpan(Color.RED), 1, 4, 0);

जहां यह एक लाल रंग के साथ पॉज़ 1 - 4 के चौराहों को उजागर करेगा। उम्मीद है की यह मदद करेगा!


5
 String name = modelOrderList.get(position).getName();   //get name from List
    String text = "<font color='#000000'>" + name + "</font>"; //set Black color of name
    /* check API version, according to version call method of Html class  */
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) {
        Log.d(TAG, "onBindViewHolder: if");
        holder.textViewName.setText(context.getString(R.string._5687982) + " ");
        holder.textViewName.append(Html.fromHtml(text));
    } else {
        Log.d(TAG, "onBindViewHolder: else");
        holder.textViewName.setText("123456" + " ");   //set text 
        holder.textViewName.append(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY));   //append text into textView
    }

color.xml से फ़ॉन्ट रंग कैसे प्राप्त करें?
नूर हुसैन

4

वैकल्पिक समाधान: इसके बजाय एक WebView का उपयोग करना। Html के साथ काम करना आसान है।

WebView webview = new WebView(this);

String summary = "<html><body>Sorry, <span style=\"background: red;\">Madonna</span> gave no results</body></html>";

webview.loadData(summary, "text/html", "utf-8");

2

इसके बजाय फ़ॉन्ट का उपयोग अवधि समाप्त हो गई है Html.fromHtml("<span style=color:red>"+content+"</span>")


1

अपने पाठ का हिस्सा रेखांकित और रंगीन बनाने के लिए

अपने तार में। xml

<string name="text_with_colored_underline">put the text here and &lt;u>&lt;font color="#your_hexa_color">the underlined colored part here&lt;font>&lt;u></string>

फिर गतिविधि में

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_colored_underline)));

और क्लिक करने योग्य लिंक के लिए:

<string name="text_with_link"><![CDATA[<p>text before link<a href=\"http://www.google.com\">title of link</a>.<p>]]></string>

और आपकी गतिविधि में:

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_link)));
yourTextView.setMovementMethod(LinkMovementMethod.getInstance());

0
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));

यह वही रंग देगा जो आपने html एडिटर में बनाया है, बस टेक्स्टव्यू सेट करें और टेक्स्टव्यू मान के साथ इसे संक्षिप्त करें। एंड्रॉइड स्पैन रंग का समर्थन नहीं करता है, इसे संपादक में फ़ॉन्ट रंग में बदल दें और आप जाने के लिए पूरी तरह से तैयार हैं।


0

सबसे पहले अपने स्ट्रिंग को HTML में कन्वर्ट करें और फिर इसे स्पैनेबल में बदलें। निम्नलिखित कोड सुझाएं।

 Spannable spannable = new SpannableString(Html.fromHtml(labelText));
                    
spannable.setSpan(new ForegroundColorSpan(Color.parseColor(color)), spannable.toString().indexOf("•"), spannable.toString().lastIndexOf("•") + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.