2013-04-15 12 views

Odpowiedz

64

Użyj poniższego kodu i spróbuj

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

Co to jest TextPaint? – Booger

+0

'ds.setColor (Color.rgb (0, 0, 255)); 'aby zachować niebieski kolor na łańcuchu spannable (lub zmienić go na dowolny kolor) –

2

spannableStringObject.toString();

Edit

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

usunie wszystkie UnderlineSpans z Spannable.

+0

prostu starał powyższą odpowiedź, to działa, ale moja Clickable Object teraz nie działa? – Ash

+0

@Ash Nie mam pojęcia, co to oznacza .. dlaczego nie podasz więcej tła i kontekstu w swoim pytaniu. – dcow

+0

toString zwraca znaki reprezentowane przez SpannableString, ponieważ SpannableString implementuje CharacterSequence. To, co mam powyżej, usunie całe formatowanie ze SpannableString. – dcow

3

Zastąp metodę updateDrawState z ClickableSpan klasy

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 
} 

Aby zmienić kolor z 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

odpowiedź Raghunandan za działa idealnie dla mnie. Oto oszczędna wersja to:

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

Działa to dla mnie. Nie ma potrzeby tworzenia niestandardowej klasy ClickableSpan. Wystarczy zastąpić 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

Najbardziej płynne rozwiązanie – ulusoyca

0

Najprostszym sposobem jest

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); 
Powiązane problemy