安卓可点击的TextView如何在文本上创建多个可点击区域并捕获选定区域

8
我希望能够使文本的几个部分成为可点击的链接,例如在下面的文本中:
取得一天、两天或七天的天气预报。
我希望能够单独点击文本中的三个不同区域来获取一天、两天或七天的预报。 我不想跳转到网页 URL,而是希望在显示 TextView 的活动中捕获文本区域的点击。

1个回答

16
你可以使用ClickableSpan实现这个功能。基本上,你需要创建一个SpannableStringBuilder,将文本部分附加到其中,并为每个可点击的文本部分设置不同的ClickableSpan。
SpannableStringBuilder sb = new SpannableStringBuilder();
String regularText = "This text is ";
String clickableText = "clickable";
sb.append(regularText);
sb.append(clickableText);
sb.setSpan(new ClickableSpan(), sb.length()-clickableText.length(), sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView tv = ...
tv.setText(sb);

这只是一个示例,说明如何设置一个可点击的 ClickableSpan。显然,在循环中执行上述操作并在每次迭代中设置新的 Span 更有意义。

但是,由于 ClickableSpan 是一个抽象类,您需要首先使用自己的具体实现扩展它。更具体地说,需要实现 onClick 方法来处理单击事件。

另外,请不要忘记为 TextView 设置 MovementMethod,例如 LinkMovementMethod:

tv.setMovementMethod(LinkMovementMethod.getInstance());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接