从textView中提取文本的一部分,并使该文本可点击吗?

时间:2019-03-03 19:35:17

标签: java android

假设我有一个字符串

String str =" Hello, @John how's going on"

现在我想知道。,如何突出显示@John一词,并使其可从Textview中单击

3 个答案:

答案 0 :(得分:2)

您可以在clickable span字符串中使用spannable,如下所示:-

SpannableString ss = new SpannableString(" Hello, @John how's going on");
ClickableSpan clickableSpan = new ClickableSpan() {
   @Override
   public void onClick(View textView) {
     //perform click operation
   }
   @Override
   public void updateDrawState(TextPaint ds) {

   }
};

ss.setSpan(clickableSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

yourTv.setText(ss);
yourTv.setMovementMethod(LinkMovementMethod.getInstance());
yourTv.setHighlightColor(Color.TRANSPARENT);
  

startIndex-是完整字符串中的单词 John J 索引

     

endIndex-是完整字符串中单词 John n 索引。

单击john后,将触发

&& onclick 方法。

修改

要提取用户名John ,您可以拆分字符串并按以下代码片段进行获取:-

 String username = yourString.split("@")[1].split(" ")[0]; // this will extract john 

答案 1 :(得分:0)

在这里您可以设置字符串在XML文件的文本视图中,这将不是问题。 那么您可以在其中添加onclick:“ clickable”属性,它将正常工作

答案 2 :(得分:0)

这也适用于多处提及。

var str = "Hello, @John how's going on. Greedings to @Bob.";
    var regex = /[@]\S[^. ]*/g;

    var matches = str.match(regex)
    var split = str.split(regex);

    for(var i = 0; i<matches.length;i++){
        document.body.appendChild(document.createTextNode(split[i]));

        var a = document.createElement('a');
        a.appendChild(document.createTextNode(matches[i]));
        a.title = "my title text";//text you can see onHover
          a.href = "http://example.com/users/"+matches[i].split('@')[1];//link to user
        document.body.appendChild(a);
    }
    document.body.appendChild(document.createTextNode(split[split.length-1]));