如何设置单击动态变化的TextView的每个单词?

时间:2019-04-04 16:27:34

标签: java android

我制作了一个应用,其中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());

1 个答案:

答案 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帖子。

希望您的回答对您有所帮助!

结果:
在每个单词后添加“,”

Added ", " after each word