TextView是链接和可选?

我想有一个可以选择和链接的TextView 。 当我这样做时,我最终选择了可选文本,但链接不能被点击。

编辑:

我将展示代码来解释我所挣扎的内容:

    TextView textView = view.findViewById(R.id.mytext);
    textView.setText("My text: +4412345678 Go to website: www.google.com Blah blah");
    Linkify.addLinks(textView, Linkify.ALL);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        textView.setTextIsSelectable(true);
    }

你有没有尝试在TextView xml代码中添加这个?

    <TextView
    ...
    android:autoLink="all"
    android:textIsSelectable="true" />

我已经在我的代码上试了一下,我可以打电话/浏览网页/邮件,也可以选择所有文本。


autoLink属性有一个恼人的错误:如果你点击你的电话号码示例,然后返回并点击第二个url链接 - 它会再次打开电话号码。 这个属性对于多个链接来说非常糟糕,我已经实现了我自己的类,这里是Github ClickableLinksTextView.java上的链接

在你的例子中,你可以用xml-layout中的ClickableLinksTextView类替换TextView类,并像下面这样更改代码:

ClickableLinksTextView textView = (ClickableLinksTextView)view.findViewById(R.id.mytext);
textView.setText("My text: +4412345678 Go to website: www.google.com Blah blah");
Linkify.addLinks(textView, Linkify.ALL);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    textView.setMovementMethod(ArrowKeyMovementMethod.getInstance());
    textView.setTextIsSelectable(true);
    // the autoLink attribute must be removed, if you hasn't set it then ok, otherwise call textView.setAutoLink(0);
}

在你的问题中,问题的最初原因是LinkMovementMethod类和textIsSelectable属性根本不兼容,甚至Android操作系统开发人员都在Android操作系统源代码中承认这一点。

不要更改支持文本选择的文本的移动方法,因为它可以防止任意光标位移。

如果文本视图是可选的,则只有2个正确的移动方法值为nullArrowKeyMovementMethod 。 这就是为什么我在我的示例中明确地设置了ArrowKeyMovementMethod ,因为Linkify.addLinks设置了不正确的移动方法,我应该恢复它。

至于autoLink属性的错误,这是因为android开发者没有正确地复制链接检测。 您可以在@cheng yang的答案中查看代码示例,无论您拥有多少个代码,代码都只需要第一个链接。


问题出在Android的TextView 。 调用Linkify.addLinks()不会改变TextView本身的自动Linkify.addLinks() 。 我认为这是一个Android错误,他们检查mAutoLinkMask。 因此,如果您在xml文件中设置了android:autoLink ,或者将setAutoLinkMask()设置为非0值,它将起作用。

仅供参考, TextView的源代码:

            if (touchIsFinished && mLinksClickable && mAutoLinkMask != 0 && textIsSelectable) {
            // The LinkMovementMethod which should handle taps on links has not been installed
            // on non editable text that support text selection.
            // We reproduce its behavior here to open links for these.
            ClickableSpan[] links = ((Spannable) mText).getSpans(getSelectionStart(),
                    getSelectionEnd(), ClickableSpan.class);

            if (links.length > 0) {
                links[0].onClick(this);
                handled = true;
            }
        }
链接地址: http://www.djcxy.com/p/74631.html

上一篇: TextView that is linkified and selectable?

下一篇: Linkify textView and make text selectable