我有一个 TextView,通过匹配一些正则表达式模式,我添加了自定义链接,例如"@abc"、"#android"。这些链接已经正确地显示了出来。但是我现在无法提取被点击的链接文本。我使用 SpannableString 来为 TextView 设置文本,然后使用自定义的 ClickableSpan 设置 Span。它运行良好。另外,我也能够捕获到 onclick 事件。 但是 onClick() 方法有一个 View 参数。如果我在这个 View 上调用 getText()(当然要将其强制转换为 TextView),它会返回整个文本。
我搜索了很多资料,都找到了添加链接和捕获事件的方法,但没有一个告诉我如何获取链接的文本。
这是我用来添加链接并接收 onclick 的代码。我从 SO 的一个线程中得到了这个代码。
我搜索了很多资料,都找到了添加链接和捕获事件的方法,但没有一个告诉我如何获取链接的文本。
这是我用来添加链接并接收 onclick 的代码。我从 SO 的一个线程中得到了这个代码。
Pattern pattern = Pattern.compile("@[\\w]+");
Matcher matcher = pattern.matcher(tv.getText());//tv is my TextView
while (matcher.find()) {
int x = matcher.start();
int y = matcher.end();
final android.text.SpannableString f = new android.text.SpannableString(
tv.getText());
f.setSpan(new InternalURLSpan(new View.OnClickListener() {
public void onClick(View v) {
showDialog(1);
}
}), x, y, android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(f);
tv.setLinkTextColor(Color.rgb(19, 111, 154));
tv.setLinksClickable(true);
这里是InternalURLSpan:
class InternalURLSpan extends android.text.style.ClickableSpan {
View.OnClickListener mListener;
public InternalURLSpan(View.OnClickListener listener) {
mListener = listener;
}
@Override
public void onClick(View widget) {
mListener.onClick(widget);
TextView tv = (TextView) widget;
System.out.println("tv.gettext() :: " + tv.getText());
Toast.makeText(MyActivity.this,tv.getText(),
Toast.LENGTH_SHORT).show();
}
}
能否获取所单击链接的文本?如果不能,是否有一种方法将某些数据关联到特定的链接并知道哪个链接被点击了?有任何建议。
谢谢