如何摆脱带有可点击对象的可伸缩string中的下划线?

目前我有一个可点击的对象设置的Spannable对象。 当在TextView中显示Spannablestring时,它具有蓝色文本和蓝色下划线(向用户指示此文本是可点击的)。我的问题是如何防止蓝色下划线不会出现? 我已经四处搜寻,但找不到任何东西。

Solutions Collecting From Web of "如何摆脱带有可点击对象的可伸缩string中的下划线?"

使用下面的代码并尝试

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 } } 

这对我有用。 无需创build自定义的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); 

Raghunandan的回答对我来说是完美的。 这是它的一个简化版本:

 public abstract class NoUnderlineClickableSpan extends ClickableSpan { public void updateDrawState(TextPaint ds) { ds.setUnderlineText(false); } } 

重写ClickableSpan类的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) { // 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 } 

用于改变spannable String的颜色

  SpannableString ss = new SpannableString("android Stack Overflow"); ForegroundColorSpan fcs=newForegroundColorSpan(Color.parseColor("#01579B")); ss.setSpan(fcs, 8,13, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

spannableStringObject.toString();

编辑

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

将从Spannable中删除所有的UnderlineSpans。

 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 } } 

最简单的方法是

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