我制作了一个应用,其中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());
答案 0 :(得分:2)
将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());
来自this帖子。
希望您的回答对您有所帮助!
结果:
在每个单词后添加“,”