2013-04-15 6 views
33

मेरे पास Spannable Object है जिसमें Clickable Object सेट है। Spannable StringTextView में प्रदर्शित होता है, इसमें नीली पाठ और नीली रेखा रेखा होती है (यह दर्शाता है कि यह टेक्स्ट क्लिक करने योग्य है)। मेरी समस्या यह है कि मैं TextView में नीली रेखांकन को कैसे रोक सकता हूं?एक क्लिक करने योग्य ऑब्जेक्ट के साथ स्पैन करने योग्य स्ट्रिंग में अंडरलाइन से कैसे छुटकारा पाएं?

उत्तर

64

नीचे कोड का प्रयोग करें और कोशिश ClickableSpan वर्ग

String mystring =" Hello"; 
SpannableString ss= new SpannableString(mystring); 
ss.setSpan(new MyClickableSpan(mystring), 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

class MyClickableSpan extends ClickableSpan{// extend ClickableSpan  

String clicked; 
public MyClickableSpan(String string) { 
    // TODO Auto-generated constructor stub 
super(); 
clicked =string; 
} 

public void onClick(View tv) { 

    Toast.makeText(MainActivity.this,clicked , 
     Toast.LENGTH_SHORT).show(); 
} 

public void updateDrawState(TextPaint ds) {// override updateDrawState 
    ds.setUnderlineText(false); // set to false to remove underline 
} 

की

String mystring =" Hello"; 
SpannableString ss= new SpannableString(mystring); 
ss.setSpan(new MyClickableSpan(mystring), 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

class MyClickableSpan extends ClickableSpan{// extend ClickableSpan  

    String clicked; 
    public MyClickableSpan(String string) { 
     super(); 
     clicked = string; 
    } 

    public void onClick(View tv) { 
     Toast.makeText(MainActivity.this,clicked , Toast.LENGTH_SHORT).show(); 
    } 

    public void updateDrawState(TextPaint ds) {// override updateDrawState 
     ds.setUnderlineText(false); // set to false to remove underline 
    } 
} 
+0

टेक्स्टपेंट क्या है? – Booger

+0

'ds.setColor (Color.rgb (0, 0, 255)); 'स्पैन करने योग्य स्ट्रिंग पर नीला रंग रखने के लिए (या इसे किसी भी रंग में बदलें)। –

2

spannableStringObject.toString();

संपादित

SpannableString ss = getYourSpannableString(); 
UnderlineSpan[] uspans = ss.getSpans(0, ss.length(), UnderlineSpan.class); 
for (UnderlineSpan us : uspans) { 
    ss.removeSpan(us); 
} 

Spannable से सभी UnderlineSpans हटा देंगे।

+0

बस ऊपर जवाब करने की कोशिश की है, यह काम करता है, लेकिन मेरे क्लिक करने योग्य वस्तु अब काम नहीं करता है? – Ash

+0

@ एश मुझे नहीं पता कि इसका क्या अर्थ है .. आप अपने प्रश्न में थोड़ा और पृष्ठभूमि और संदर्भ क्यों नहीं देते हैं। – dcow

+0

टूस्ट्रिंग स्पैनबलस्टिंग द्वारा वर्णित वर्णों को लौटाता है क्योंकि स्पैनेबलस्ट्रिंग कैरेक्टरसक्वेंस लागू करता है। जो मैंने ऊपर दिखाया है वह स्पैन करने योग्य स्ट्रिंग से सभी स्वरूपण को हटा देगा। – dcow

3

अवहेलना updateDrawState विधि spannable स्ट्रिंग

SpannableString ss = new SpannableString("android Stack Overflow"); 

    ForegroundColorSpan fcs=newForegroundColorSpan(Color.parseColor("#01579B")); 
    ss.setSpan(fcs, 8,13, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
4

रघुनंदन का जवाब मेरे लिए पूरी तरह से काम करता है का रंग बदलने के लिए।

public abstract class NoUnderlineClickableSpan extends ClickableSpan {  
    public void updateDrawState(TextPaint ds) { 
     ds.setUnderlineText(false); 
    } 
} 
1
Try the below code to remove underlined and clicked event on multiple words in textview : 



      String str="Angelina Clapped For Lester Kang"; 
      Spannable span = Spannable.Factory.getInstance().newSpannable(str); 

      // 0 to 8 start and index of Angelina 
      span.setSpan(new ClickableSpan(str), 0, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

      // 21 to 32 start and index of Lester Kang 
      span.setSpan(new ClickableSpan(str), 21, 32, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

      textview.setText(span); 

      class ClickableSpan extends ClickableSpan{ 

        String clicked; 
        public ClickableSpan (String string) { 
         super(); 

        } 

        public void onClick(View v) { 
         Toast.makeText(MyActivity.this,""+((TextView)v).getText().toString(),Toast.LENGTH_SHORT).show(); 
        } 

        public void updateDrawState(TextPaint ds) { 
         // override updateDrawState 
         ds.setUnderlineText(false); // set to false to remove underline 
        } 
       } 
23

यह मेरे लिए काम करता है: यहां इसके बारे में एक मुकाबले डाउन संस्करण है। कस्टम ClickableSpan कक्षा बनाने की कोई आवश्यकता नहीं है। बस updateDrawState(TextPaint ds) ओवरराइड करें।

SpannableString span = new SpannableString("Some text"); 
ClickableSpan clickSpan = new ClickableSpan() { 
    @Override 
    public void updateDrawState(TextPaint ds) { 
     ds.setColor(ds.linkColor); // you can use custom color 
     ds.setUnderlineText(false); // this remove the underline 
    } 

    @Override 
    public void onClick(View textView) { 
     // handle click event 
    } 
}; 

span.setSpan(clickSpan, 5, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
yourTextView.setText(span); 
+1

चिकनाई समाधान – ulusoyca

0

सबसे आसान तरीका

string1 = new SpannableString("By Tapping Register You Agree To The \nTerms And Conditions"); 
    ClickableSpan clickableSpan = new ClickableSpan() { 
     @Override 
     public void onClick(View widget) { 
      Toast.makeText(getApplicationContext(),"clicked",Toast.LENGTH_SHORT).show(); 
     } 
     @Override 
     public void updateDrawState(TextPaint ds) { 
     ds.setUnderlineText(false); // this line removes underline 
     } 

    }; 
    text_terms.setMovementMethod(LinkMovementMethod.getInstance()); 
    string1.setSpan(clickableSpan,37,string1.length(),0); 
    text_terms.setText(string1); 
संबंधित मुद्दे