2013-04-15 8 views

Antwort

64

den Code unten verwenden und

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

Was ist TextPaint? – Booger

+0

'ds.setColor (Color.rgb (0, 0, 255)), um eine blaue Farbe auf der spannbaren Zeichenfolge zu halten (oder ändern Sie sie in eine beliebige Farbe) –

2

spannableStringObject.toString();

bearbeiten

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

Werden alle UnderlineSpans vom Spannable entfernen.

+0

einfach die oben genannte Antwort versucht, es funktioniert, aber mein klickbare Objekt jetzt nicht arbeiten? – Ash

+0

@Ash Ich habe keine Ahnung, was das bedeutet .. warum gibst du nicht ein wenig mehr Hintergrund und Kontext in deiner Frage. – dcow

+0

toString gibt die Zeichen zurück, die vom SpannableString dargestellt werden, da SpannableString CharacterSequence implementiert. Was ich oben gezeigt habe, wird alle Formatierungen aus dem SpannableString entfernen. – dcow

3

Aufschalten updateDrawState Methode der ClickableSpan Klasse versuchen

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 
} 

Für Farbe spannable String

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

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

Raghunandan Antwort funktioniert perfekt für mich zu ändern. Hier ist eine abgespeckte Version davon:

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

Dies funktioniert für mich. Keine Notwendigkeit, benutzerdefinierte ClickableSpan Klasse zu erstellen. Überschreiben Sie einfach 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

Die smootest Lösung – ulusoyca

0

einfachste Weg ist

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); 
Verwandte Themen