2013-07-26 7 views
12

हैलो मैंने टेक्स्टव्यू में कुछ टेक्स्ट सेट किया है।स्पैन किए गए स्ट्रिंग को स्पैन करने योग्य कैसे परिवर्तित करें

TextView tweet = (TextView) vi.findViewById(R.id.text); 
tweet.setText(Html.fromHtml(sb.toString())); 

तब मैं Spannble में TextView का पाठ परिवर्तित करने के लिए की जरूरत है। तो मैं इस तरह किया:

Spannable s = (Spannable) tweet.getText(); 

मैं इसे Spannable बदलने की आवश्यकता है क्योंकि मैं एक समारोह में TextView पारित कर दिया:

private void stripUnderlines(TextView textView) { 
      Spannable s = (Spannable) textView.getText(); 
      URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class); 
      for (URLSpan span : spans) { 
       int start = s.getSpanStart(span); 
       int end = s.getSpanEnd(span); 
       s.removeSpan(span); 
       span = new URLSpanNoUnderline(span.getURL()); 
       s.setSpan(span, start, end, 0); 
      } 
      textView.setText(s); 
     } 

private class URLSpanNoUnderline extends URLSpan { 
     public URLSpanNoUnderline(String url) { 
      super(url); 
     } 

     @Override 
     public void updateDrawState(TextPaint ds) { 
      super.updateDrawState(ds); 
      ds.setUnderlineText(false); 
     } 
    } 

यह कोई त्रुटि/चेतावनी दिखाता है।

java.lang.ClassCastException: android.text.SpannedString cannot be cast to android.text.Spannable 

मैं Spannble में TextView की SpannedStringt/पाठ कैसे परिवर्तित कर सकते हैं: लेकिन एक रनटाइम त्रुटि फेंक? या क्या मैं फ़ंक्शन के अंदर SpannedString के साथ एक ही कार्य कर सकता हूं?

+0

भयानक जब यूआई लोग कोई रेखांकन के साथ लिंक बनाने का निर्णय लेते हैं? एक ही चीज़ के माध्यम से जा रहे हैं। – portfoliobuilder

उत्तर

20

How can I convert the SpannedStringt/text of the textview into Spannble?

new SpannableString(textView.getText()) काम करना चाहिए।

Or can I do the same task with SpannedString inside the function?

क्षमा करें, लेकिन removeSpan() और setSpan()Spannable इंटरफेस पर तरीके हैं, और SpannedStringSpannable को लागू नहीं करता है।

+0

'नया स्पैन करने योग्य स्ट्रिंग (textView.getText()) 'मुझे इसकी आवश्यकता नहीं है क्योंकि' textView.getText() 'पहले से ही' स्पैनस्ट्रिंग 'है। मुझे 'textView.getText()' को 'स्पैन करने योग्य' में रूपांतरित करने की आवश्यकता है। क्या कोई रास्ता है? –

+1

@typedef: कृपया मेरा उत्तर दोबारा पढ़ें। कृपया ध्यान दें कि मैं आपको ** 'स्पैन करने योग्य स्ट्रिंग' ** बना रहा हूं। 'स्पैन करने योग्य स्ट्रिंग' लागू 'स्पैन करने योग्य'। 'स्पैनस्ट्रिंग' नहीं है। – CommonsWare

+0

महोदय, फिर मैं टेक्स्टव्यू के पाठ की रेखा को कैसे बदल सकता हूं। क्या आप मुझे कुछ संकेत दे सकते हैं? –

-1

आप BufferType.SPANNABLE जब TextView के पाठ की स्थापना, तो जब हो रही पाठ आप Spannable

myTextView.setText("hello", TextView.BufferType.SPANNABLE); 
... 
... 
... 
Spannable str = (Spannable) myTextView.getText(); 
2

यह करने के लिए इसे डाली सही काम के आसपास होना चाहिए कर सकते हैं निर्दिष्ट करते हैं। इसके देर यद्यपि लेकिन किसी भविष्य

private void stripUnderlines(TextView textView) { 
     SpannableString s = new SpannableString(textView.getText()); 
     URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class); 
     for (URLSpan span : spans) { 
      int start = s.getSpanStart(span); 
      int end = s.getSpanEnd(span); 
      s.removeSpan(span); 
      span = new URLSpanNoUnderline(span.getURL()); 
      s.setSpan(span, start, end, 0); 
     } 
     textView.setText(s); 
    } 



private class URLSpanNoUnderline extends URLSpan { 
    public URLSpanNoUnderline(String url) { 
     super(url); 
    } 

    @Override 
    public void updateDrawState(TextPaint ds) { 
     super.updateDrawState(ds); 
     ds.setUnderlineText(false); 
    } 
} 
0

दुर्भाग्य से इनमें से कोई भी मेरे लिए काम किया में यह आवश्यकता हो सकती है, लेकिन अपने समाधान के सभी के साथ लगभग नगण्य होने के बाद मैं कुछ है कि काम मिल गया।

यह जब तक आप

SPANNABLE

के रूप में यह निर्दिष्ट textView.getText() कास्टिंग Spannable को त्रुटि जाएगा इसके अलावा @ CommonsWare के पृष्ठ से सूचना:

ध्यान दें कि आप पर setText() कॉल करने के लिए नहीं करना चाहते हैं TextView, यह सोचकर कि आप संशोधित संस्करण के साथ पाठ को बदल देंगे। आप इस फिक्सटेक्स्ट व्यू() विधि में टेक्स्टव्यू के टेक्स्ट को जगह में संशोधित कर रहे हैं, और इसलिए setText() आवश्यक नहीं है। इससे भी बदतर, यदि आप एंड्रॉइड का उपयोग कर रहे हैं: autoLink, setText() एंड्रॉइड को वापस जाने और URLSpans को फिर से जोड़ने का कारण बनता है।

accountAddressTextView.setText(accountAddress, TextView.BufferType.SPANNABLE); 

stripUnderlines(accountAddressTextView); 

private void stripUnderlines(TextView textView) { 
    Spannable entrySpan = (Spannable)textView.getText(); 
    URLSpan[] spans = entrySpan.getSpans(0, entrySpan.length(), URLSpan.class); 

    for (URLSpan span: spans) { 
      int start = entrySpan.getSpanStart(span); 
      int end = entrySpan.getSpanEnd(span); 
      entrySpan.removeSpan(span); 
      span = new URLSpanNoUnderline(entrySpan.subSequence(start, end).toString()); 
      entrySpan.setSpan(span, start, end, 0); 
    } 
} 
संबंधित मुद्दे