最近UI有一个类似微信评论的功能, 其实也挺简单,就是开始被网络上面的各种复制黏贴误导了 ,但是也提供了思路
这是自己的实现
private String [] arryNames = new String[]{"李梅","宋丹丹", "梅艳芳","刘佳伦","周玉凤","李梅","宋丹丹", "梅艳芳","刘佳伦","周玉凤"};
private int fromIndex;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_span_layout);
TextView mTextView = (TextView)findViewById(R.id.like_tv);
// 构造多个超链接的html, 通过选中的位置来获取用户名
StringBuilder sbBuilder = new StringBuilder();
for (int i = 0; i < arryNames.length; i++) {
sbBuilder.append(arryNames[i] + "、");
}
String likeUsers = sbBuilder.substring(0, sbBuilder.lastIndexOf("、")).toString();
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
mTextView.setText(addClickablePart(likeUsers), TextView.BufferType.SPANNABLE);
}
/** @param str
* @return
*/
private SpannableStringBuilder addClickablePart(String str) {
SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append(str) ;
String[] likeUsers = str.split("、");
if (likeUsers.length > 0) {
// 最后一个
for (int i = 0; i < likeUsers.length; i++) {
final String name = likeUsers[i];
//这里非常关键,因为人名或者文本可能会存在相同的,如果使用网上复制黏贴的
//final int start = str.indexOf(name); 后面出现相同的文本将会无法点击,因为这句话始终是返回此字符串中第一次出现处的索引,而我们应该从上一个字符串的长度脚标算起
final int start = str.indexOf(name, fromIndex);
fromIndex = start + name.length();
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(getApplicationContext(), name, Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
// ds.setColor(Color.RED); // 设置文本颜色
// 去掉下划线
ds.setUnderlineText(false);
}
}, start, fromIndex, 0);
}
}
return ssb.append("等" + likeUsers.length + "个人赞了您.");
} // end of addClickablePar
转载 https://blog.youkuaiyun.com/qq_43661309/article/details/87883523,感谢博主给我指引,文章介绍只是适合像这样不同的用户 , 存在相同的就会出现无法点击