SDK 20+的手机认为任何两个带有点之间的单词都是链接.如何制作自己的Link探测器?
android:autoLink="web"认为abra.kadabra是一个网址.
setAutoLinkMask(Linkify.WEB_URLS);认为abra.kadabra是一个网址.
SDK <20的电话正确链接所有内容,错误仅在SDK为20+时发生.
我尝试过的例子:
代码发生在我的自定义TextView中
SpannableString ss = new SpannableString(this.getText().toString());
//LinkManager is a copy of Linkify but with another pattern.
LinkManager.addLinks(ss, LinkManager.WEB_URLS);
setText(ss);
setMovementMethod(LinkMovementMethod.getInstance());
setWebLinksTouchFeedback();
Run Code Online (Sandbox Code Playgroud)
这没有任何联系.即使我使用Linkify而不是LinkManager
我已经尝试了许多其他解决方案,所有这些解决方案最终都无法连接任何内容 有解决方案吗?
Matcher您可以使用和类制作自己的链接检测器Pattern,并使用 使其可点击ClickableSpan。
String text = textView.getText().toString();
int i=0;
SpannableString spannableString = new SpannableString(text);
Matcher urlMatcher = Patterns.WEB_URL.matcher(text);
while(urlMatcher.find()) {
String url = urlMatcher.group(i);
int start = urlMatcher.start(i);
int end = urlMatcher.end(i++);
spannableString.setSpan(new GoToURLSpan(url), start, end, 0);
}
textView.setText(spannableString);
textView.setMovementMethod(new LinkMovementMethod());
Run Code Online (Sandbox Code Playgroud)
private static class GoToURLSpan extends ClickableSpan {
String url;
public GoToURLSpan(String url){
this.url = url;
}
public void onClick(View view) {
Uri webPage = Uri.parse(url); //http:<URL> or https:<URL>
Intent intent = new Intent(Intent.ACTION_VIEW, webPage);
view.getContext().startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/text"
android:text="Link http://google.com but dont link abra.kadabra"
android:textColorLink="@color/accent"
android:textColorHighlight="@color/accent" />
Run Code Online (Sandbox Code Playgroud)
换成Pattern.WEB_URL你自己的。您可以在 StackOverflow 中找到一些 url 模式。
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |