文本视图中的可单击链接处理程序


与此SO

问题类似,我正在尝试在文本视图中显示可点击的链接:如何使文本视图中的链接可点击?

但我不只是想要打开网站的链接。我想自己处理点击事件,比如说,启动一个活动。这是我到目前为止所拥有的:

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());

最新更新