java - 如何设置动态变化的 TextView 的每个单词的点击?
问题描述
我制作了一个TextView
使用setText
来自服务器的应用程序。所以从服务器获取的字符串是由用户动态更改的。现在我想让所有单词都可以点击TextView
。
例如:
TextView return the text(string) is : cricket football hockey ...etc(whatever).
为此,我想让每个单词都可点击,将用户发送到其他用户活动,例如社交媒体中的 hashTag 时尚。
SpannableStringBuilder builder = new SpannableStringBuilder();
String[] words = tag.split(" ");
for(final String word: words)
{
builder.append(word).setSpan(new ClickableSpan()
{
@Override
public void onClick(@NonNull View view)
{
Toast.makeText(ClickPostEdit.this, word, Toast.LENGTH_SHORT).show();
}
// optional - for styling the specific text
/*@Override
public void updateDrawState(@NonNull TextPaint textPaint) {
textPaint.setColor(textPaint.linkColor); // you can use custom color
textPaint.setUnderlineText(false); // this remove the underline
}*/
}, builder.length() - word.length(), word.length(), 1);
}
EditPostTag.setText(builder, TextView.BufferType.SPANNABLE);
EditPostTag.setMovementMethod(LinkMovementMethod.getInstance());
解决方案
将ClickableSpans附加到SpannbleStringBuilder。
您可以遍历您的单词列表,将每个单词附加到构建器并将 ClickableSpan 附加到它:
SpannableStringBuilder builder = new SpannableStringBuilder();
for(String word: words) {
builder
.append(word)
.setSpan(new ClickableSpan() {
@Override
public void onClick(@NonNull View view) {
// on click
}
// optional - for styling the specific text
/*@Override
public void updateDrawState(@NonNull TextPaint textPaint) {
textPaint.setColor(textPaint.linkColor); // you can use custom color
textPaint.setUnderlineText(false); // this remove the underline
}*/
}, builder.length() - word.length(), builder.length(), 0);
}
要将此 Spannable 设置为 TextView,请使用:
textView.setText(builder, TextView.BufferType.SPANNABLE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
取自这篇文章。
希望我的回答对您有所帮助!
结果:
在每个单词后添加“,”
推荐阅读
- sh - sh 脚本卡在 while 循环中的读取命令上
- java - 为什么我的循环会从 1 而不是 0 开始?
- regex - 增加除一个或多个以外的所有数字(用逗号分隔),以前面的字符串为条件(用于书籍索引)
- c++ - 构造字符串向量时是否有任何副本?
- c# - DialogHost 内部无法触发 Caliburn Micro void 功能
- java - 内部属性不会在 JOOQ 中自动转换
- numpy - “str”对象没有属性“ndim”keras
- c++ - 如何从文件夹树中快速选择随机文件?
- jolt - 使用 JOLT 查找特定的兄弟节点
- python - 无法使用 numpy 运行 timeit