与此问题类似,我尝试在TextView中显示可点击链接:How do I make links in a TextView clickable?
但我并不想要链接打开网站。我想自己处理点击事件,比如说,启动一个活动。以下是我到目前为止的情况:
myTextView.movementMethod = object: LinkMovementMethod() {
override fun onTouchEvent(widget: TextView?, buffer: Spannable?, event: MotionEvent?): Boolean {
doTheThing()
return super.onTouchEvent(widget, buffer, event)
}
}
在我的TextView上:
android:text="Foo <a href="bar">Bar</a>"
正如所料,&#34; Bar&#34;用蓝色加下划线,但每当我点击整个TextView时onTouchEvent都会被触发,包括在Foo上。当我点击&#34; Bar&#34;我只想要它开火。因为那是什么强调的。另外,如果我在文本中有多个链接怎么办?我如何让每个人做出不同的回应?
答案 0 :(得分:0)
将字符串拆分为部分:在链接文本之前,链接文本,在链接文本之后:
<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部分字符串末尾到结尾处的跨度上设置ClickableSpan
,并使用适当的链接处理程序第1部分+链接字符串:
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());