Android 链接并可选择的文本视图?
我想要一个既可选择又可链接的Android 链接并可选择的文本视图?,android,textview,linkify,selectable,Android,Textview,Linkify,Selectable,我想要一个既可选择又可链接的TextView。当我同时做这两件事时,我会得到可选择的文本,但是链接不能被点击 编辑: 我将展示代码来解释我所遇到的困难: TextView textView = view.findViewById(R.id.mytext); textView.setText("My text: +4412345678 Go to website: www.google.com Blah blah"); Linkify.addLinks(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" />
我已经在我的代码上试过了,我可以打电话/浏览网页/邮件,还可以选择所有文本。问题在于Android的
TextView
。调用Linkify.addLinks()
不会更改TextView
本身中的自动链接掩码。
我认为他们检查mAutoLinkMask是Android的一个bug。
因此,如果您在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;
}
}
autoLink
属性有一个恼人的错误:如果在示例中单击电话号码,然后返回并单击第二个url链接,它将再次打开电话号码。这个属性在多个链接中效果很差,我已经实现了自己的类,下面是Github上的链接
在您的示例中,您可以在xml布局中将TextView
类替换为myClickableLinksTextView
类,并按如下方式更改代码:
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操作系统开发人员也承认这一点
不要更改支持文本选择的文本的移动方法,因为这将防止任意光标移动
如果文本视图是可选的,则只有两个正确的移动方法值是null
和ArrowKeyMovementMethod
。这就是我在示例中明确设置ArrowKeyMovementMethod
的原因,因为Linkify.addLinks
设置了不正确的移动方法,我应该将其还原
至于autoLink属性的bug,这是因为android开发者没有正确复制链接检测。你可以看看@cheng yang答案中的代码示例,不管你有多少个链接,代码都只取第一个链接。你在做什么,但不起作用?尝试将其链接化只起作用吗?当我将其链接化时,我可以单击URL和电话。但当我将其设置为可选择时,再也不可能单击TextView.setMovementMethod(ArrowKeyMovementMethod.getInstance());是我需要让它为我工作的东西。将它与我自己的URLspan和其他自定义span混合使用,您的类工作得非常好。谢谢你提供它!顺便说一句,没有必要将其显式强制转换为ClickableLinksTextView,因为TextView api保持不变。非常感谢,它帮助了很多解决方案的工作。但是不要创建自定义的
TextView
,而是设置Linkify.addLinks(mText,Linkify.ALL);mText.settextisselection(true);setMovementMethod(LinkMovementMethod.getInstance())动态编码>并从.xml
文件中删除相应的行。因此,它只是对先前准备好的textView
(比如textView=inflater.inflate(R.layout.linkify\u text\u view,null)
)进行充气,因为它在通过代码添加时无法正常工作。也检查一下这个