问题类似,我正在尝试在文本视图中显示可点击的链接:如何使文本视图中的链接可点击?
但我不只是想要打开网站的链接。我想自己处理点击事件,比如说,启动一个活动。这是我到目前为止所拥有的:
myTextView.movementMethod = object: LinkMovementMethod() {
override fun onTouchEvent(widget: TextView?, buffer: Spannable?, event: MotionEvent?): Boolean {
doTheThing()
return super.onTouchEvent(widget, buffer, event)
}
}
在我的文本视图上:
android:text="Foo <a href="bar">Bar</a>"
正如预期的那样,"Bar"以蓝色下划线,但是每当我单击整个TextView(包括Foo)时,onTouchEvent就会跳闸。我只希望它在我点击"酒吧"时触发,因为这是下划线。另外,如果我在文本中有多个链接怎么办?我如何让每个人都有不同的反应?
将字符串拆分为多个部分:在链接文本之前,链接文本之前,在链接文本之后:
<string name="part_1">Here is a </string>
<string name="link_text">link</string>
<string name="part_2"> for you to tap</string>
然后使用SpannableStringBuilder
组装部件,并在添加链接文本时,在从第 1 部分字符串末尾到第 1 部分 + 链接字符串末尾的跨度上设置具有相应链接处理程序的ClickableSpan
:
SpannableStringBuilder builder = new SpannableStringBuilder(getString(R.string.part_1));
int spanStart = builder.length();
builder.append(getString(R.string.link_text));
int spanEnd = builder.length();
builder.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
// Do my thang
}
}, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(getString(R.string.part_2));
textView.setText(builder);
textView.setMovementMethod(LinkMovementMethod.getInstance());