【发布时间】:2012-04-16 10:57:17
【问题描述】:
我想让文本的几个部分分别可点击,例如在下面的文本中:
获取一天、两天、七天的天气预报。
我希望能够单独单击文本的三个不同区域以获取 1 天、2 天或 7 天的预测。我不希望它转到网页 URL,而只是点击显示 TextView 的活动内的文本区域。
【问题讨论】:
标签: android
我想让文本的几个部分分别可点击,例如在下面的文本中:
获取一天、两天、七天的天气预报。
我希望能够单独单击文本的三个不同区域以获取 1 天、2 天或 7 天的预测。我不希望它转到网页 URL,而只是点击显示 TextView 的活动内的文本区域。
【问题讨论】:
标签: android
您应该能够使用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 的示例。显然,在循环中执行上述操作并为每次迭代设置一个新的跨度会更有意义。
但是,由于 ClickableSpan 是一个抽象类,您首先需要使用自己的具体实现来扩展它。更具体地说,需要实现 onClick 方法来处理点击事件。
另外,不要忘记为 TextView 设置一个 MovementMethod,例如链接移动方法:
tv.setMovementMethod(LinkMovementMethod.getInstance());
【讨论】: