2013-04-15 54 views
33

Tôi có một Spannable Object với một thiết lập Clickable Object. Khi Spannable String được hiển thị trong TextView, văn bản màu xanh lam và gạch dưới màu xanh dương (cho biết người dùng có thể nhấp vào Văn bản này). Vấn đề của tôi là làm thế nào tôi có thể ngăn chặn xuất hiện gạch chân màu xanh trong TextView?Làm thế nào để loại bỏ gạch chân trong một chuỗi Spannable với một đối tượng có thể nhấp?

Trả lời

64

Sử dụng mã dưới đây và thử phương pháp updateDrawState

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

TextPaint là gì? – Booger

+0

'ds.setColor (Color.rgb (0, 0, 255)); 'để giữ màu xanh trên chuỗi có thể kéo dài (hoặc thay đổi nó thành bất kỳ màu nào bạn muốn) –

2

spannableStringObject.toString();

Sửa

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

sẽ loại bỏ tất cả các UnderlineSpans từ Spannable.

+0

Chỉ cần cố gắng câu trả lời ở trên, nó không làm việc nhưng đối tượng Clickable tôi không làm việc bây giờ? – Ash

+0

@ Ash Tôi không biết điều đó có nghĩa là gì .. tại sao bạn không cung cấp thêm một chút bối cảnh và ngữ cảnh trong câu hỏi của mình. – dcow

+0

toString trả về các ký tự đại diện bởi SpannableString vì SpannableString thực hiện CharacterSequence. Những gì tôi đã hiển thị ở trên sẽ xóa tất cả các định dạng khỏi SpannableString. – dcow

3

Override của ClickableSpan lớp

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 
} 

Đối với việc thay đổi màu sắc của Chuỗi spannable

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

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

Raghunandan của câu trả lời hoạt động hoàn hảo cho tôi. Dưới đây là một phiên bản thu hẹp đà xuống của nó:

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

này làm việc cho tôi. Không cần tạo lớp tùy chỉnh ClickableSpan. Chỉ cần ghi đè 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

Giải pháp mượt mà nhất – ulusoyca

0

cách đơn giản nhất là

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