如何摆脱带有可点击对象的Spannable字符串中的下划线?

Ash*_*Ash 55 android textview spannable

我有Spannable Object一个Clickable Object集来.当Spannable String它显示在TextView它有蓝色文本和蓝色下划线(指示用户该文本是可点击的)时.我的问题是如何防止出现蓝色下划线TextView

Rag*_*dan 105

使用以下代码并尝试

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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `ds.setColor(Color.rgb(0,0,255));`在spannable字符串上保持蓝色(或将其更改为您想要的任何颜色). (4认同)

ARi*_*RiF 44

这适合我.无需创建自定义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);
Run Code Online (Sandbox Code Playgroud)


San*_*ain 5

覆盖 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
}
Run Code Online (Sandbox Code Playgroud)

用于更改可跨字符串的颜色

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

  ForegroundColorSpan fcs=newForegroundColorSpan(Color.parseColor("#01579B"));
  ss.setSpan(fcs, 8,13, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
Run Code Online (Sandbox Code Playgroud)


Jos*_*son 5

拉古南丹(Raghunandan)的答案非常适合我。这是它的简化版本:

public abstract class NoUnderlineClickableSpan extends ClickableSpan {    
    public void updateDrawState(TextPaint ds) {
        ds.setUnderlineText(false);
    }
}
Run Code Online (Sandbox Code Playgroud)