2011-08-28 25 views
67

में एक शब्द का टेक्स्ट रंग बदलें, मैं के भीतर TextView में एक शब्द के टेक्स्ट को बदलने का एक तरीका ढूंढ रहा हूं।टेक्स्ट व्यू

उदाहरण के लिए, इस के साथ:

String first = "This word is "; 
String next = "red" 
TextView t = (TextView) findViewById(R.id.textbox); 
t.setText(first + next); 

मैं कैसे लाल को next पाठ का रंग बदल जाएगा?

+1

की [? यह संभव एक TextView अंदर कई शैलियों के लिए है] संभावित डुप्लिकेट (http://stackoverflow.com/questions/1529068/is-it- संभव-से-बहु-शैलियों-अंदर-एक-पाठदृश्य) – blahdiblah

+0

http://stackoverflow.com/questions/9754076/which-html-tags-are-supported-by-android-textview/35271588#35271588 –

उत्तर

130

सबसे आसान तरीका मुझे पता है कि एचटीएमएल का उपयोग करना है।

String first = "This word is "; 
String next = "<font color='#EE0000'>red</font>"; 
t.setText(Html.fromHtml(first + next)); 

लेकिन यह जब (यदि?) आप रंग है, जो एक परेशानी का कारण बन सकता बदलना चाहते TextView के पुनर्निर्माण के लिए की आवश्यकता होगी।

+1

यह निश्चित रूप से सबसे आसान तरीका है लेकिन रंग को रंग नहीं होना चाहिए = '# EE0000' पाउंड प्रतीक को हेक्साडेसिमल रंग को इंगित करने के लिए आवश्यक है। – Tom

+0

फिक्स्ड, धन्यवाद! मुझे याद नहीं है कि मैंने इसे वास्तविक कोड से या स्मृति जनरेटर वेबसाइट के साथ स्मृति से कॉपी किया है, तो हो सकता है कि इससे पहले काम नहीं किया हो। – Dan

+0

ठीक है बस सुनिश्चित करें! साथ ही, जैसा कि मैंने पाया है कि आप 8-अंकों वाले हेक्स कोड का उपयोग नहीं कर सकते हैं, इसलिए कोई अल्फा घटक नहीं है। वह मुझे एक पल के लिए फेंक दिया। – Tom

62
t.setText(first + next, BufferType.SPANNABLE); 
Spannable s = (Spannable)t.getText(); 
int start = first.length(); 
int end = start + next.length(); 
s.setSpan(new ForegroundColorSpan(0xFFFF0000), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

आप spannable इस होगा उपयोग करने के लिए भी आप कुछ पाठ का आकार बढ़ाने के लिए अनुमति देता है, यह बोल्ड आदि .... यहां तक ​​कि कुछ छवि में डाल दिया है।

+4

अच्छा जवाब, धन्यवाद। इस मामले में "प्रारंभ + लम्बाई()": int end = s.length() के बजाय "s.length()" का उपयोग किया जा सकता है; – Oleg

+1

किसी को भी Xamarin.Android समाधान की तलाश में। आप अपने नियंत्रण की 'TextFormatted' प्रॉपर्टी का उपयोग करके 'स्पैन करने योग्य स्ट्रिंग' ऑब्जेक्ट असाइन कर सकते हैं। – CodeIt

+0

यह काम नहीं कर सका।बी के समाधान के साथ समाप्त हो गया। –

2

आप एक TextView पाठ (केस असंवेदी) के अंदर एक विशिष्ट String के सभी उदाहरणों की स्थिति बदलने आप StringBuilder और SpannableString इस तरह उपयोग कर सकते हैं करना चाहते हैं:

StringBuilder textBuilder = new StringBuilder(myTextView.getText().toString()); 
StringBuilder searchedTextBuilder = new StringBuilder((mySearchedString)); 
SpannableString spannableString = new SpannableString(myTextView.getText().toString()); 

int counter = 0; 
int index = 0; 

for (int i = 0;i < textBuilder.length() - mySearchedString.length() - 1;i++) 
{ 
    counter = 0; 
    if (Character.toLowerCase(textBuilder.charAt(i)) == Character.toLowerCase(searchedTextBuilder.charAt(index))) 
    { 
     counter++; 
     index++; 
     for (int j = 1,z = i + 1;j < mySearchedString.length() - 1;j++,z++) 
     { 
      if (Character.toLowerCase(textBuilder .charAt(z)) == Character.toLowerCase(searchedTextBuilder .charAt(index))) 
      { 
       counter++; 
       index++; 
      } 
      else 
      { 
       index++; 
       if (index % mySearchedString.length() == 0) 
       { 
        index = 0; 
       } 
       break; 
      } 
     } 
     if (counter == mySearchedString.length() - 1) // A match 
     { 
      spannableString.setSpan(new ForegroundColorSpan(Color.RED), i, 
           i + mySearchedString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Do the change you want(In this case changing the fore ground color to red) 
      index = 0; 
      continue; 
     } 
     else 
     { 
      index = 0; 
      continue; 
     } 
    } 
} 
myTextView.setText(spannableString); 

}

  • StringBuilder के अंदर पूरे TextView टेक्स्ट को स्टोर करें।
  • StringBuilder के अंदर खोजी गई स्ट्रिंग को स्टोर करें।
  • स्टोर एक SpannableString
  • अंदर wholre TextView पाठ TextView पाठ के अंदर सभी String उदाहरणों पाते हैं और जब तक पहुँच उन्हें बदलने के लिए एक सरल ऑपरेशन बनाओ।
  • TextView का टेक्स्ट मान SpannableString पर सेट करें।
15

SpannableStringBuilder इस तरह का प्रयोग करें:

SpannableStringBuilder builder = new SpannableStringBuilder(); 

SpannableString str1= new SpannableString("Text1"); 
str1.setSpan(new ForegroundColorSpan(Color.RED), 0, str1.length(), 0); 
builder.append(str1); 

SpannableString str2= new SpannableString(appMode.toString()); 
str2.setSpan(new ForegroundColorSpan(Color.GREEN), 0, str2.length(), 0); 
builder.append(str2); 

TextView tv = (TextView) view.findViewById(android.R.id.text1); 
tv.setText(builder, TextView.BufferType.SPANNABLE); 
+0

क्या टेक्स्ट को अपना मूल डिफ़ॉल्ट रंग बनाए रखने के लिए 'नया ForegroundColorSpan (रंग)' को प्रतिस्थापित कर सकता है? – cjnash

संबंधित मुद्दे