【问题标题】:Clickable link handler in TextViewTextView 中的可点击链接处理程序
【发布时间】:2017-10-23 15:01:44
【问题描述】:

与这个 SO 问题类似,我正在尝试在 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>"

正如预期的那样,“Bar”带有蓝色下划线,但是当我点击整个 TextView 时,onTouchEvent 就会触发,包括在 Foo 上。我只希望它在我点击“栏”时触发,因为那是下划线。另外,如果我在文本中有多个链接怎么办?如何让每个人做出不同的反应?

【问题讨论】:

标签: android android-layout kotlin textview


【解决方案1】:

将字符串分成几部分:链接文本前、链接文本、链接文本后:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2012-03-13
    相关资源
    最近更新 更多