在我的android应用程序中,我必须在Textview上显示标签。同一个textView中可以有多个标签,我想在每个标签中添加点击事件。同一个文本视图中可能有其他文本。我怎么能以这样的方式格式化文本?所有标签都可以用粗体文本和其他文本作为普通文本点击。假设在文本视图中设置文本"#tag1文本消息#tag2#tag3普通文本",其中#tag1、#tag2和#tag3为粗体文本,其余文本为普通文本样式,那么我如何实现这一点。
提前谢谢。
你可以使用这样的东西,
String str = "<b> #tag1 </b> " + textMessage + "<b> #tag2 #tag3 </b>" + normalText;
your_textview.setText(Html.fromHtml(str));
您也可以尝试SpannableStringBuilder。
您可以尝试使用SpannableStringBuilder
SpannableStringBuilder可以:
- 更改文本颜色
- 多次点击操作等
为了代码参考,你可以查看这个后
private static void singleTextView(TextView textView, final String userName, String status, final String songName) {
SpannableStringBuilder spanText = new SpannableStringBuilder();
spanText.append(userName);
spanText.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
// On Click Action
}
@Override
public void updateDrawState(TextPaint textPaint) {
textPaint.setColor(textPaint.linkColor); // you can use custom color
textPaint.setUnderlineText(false); // this remove the underline
}
}, spanText.length() - userName.length(), spanText.length(), 0);
spanText.append(status);
spanText.append(songName);
spanText.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
// On Click Action
}
@Override
public void updateDrawState(TextPaint textPaint) {
textPaint.setColor(textPaint.linkColor); // you can use custom color
textPaint.setUnderlineText(false); // this remove the underline
}
},spanText.length() - songName.length(), spanText.length(), 0);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(spanText, TextView.BufferType.SPANNABLE);
}