Android 如何在textview中创建所有3种类型的链接
我想让textview中的所有链接都可以点击 示例文本为:Android 如何在textview中创建所有3种类型的链接,android,textview,Android,Textview,我想让textview中的所有链接都可以点击 示例文本为: "All three should link out http://google.com and <a href="http://google.com">here link</a> and <a href="http://google.com">http://google.com</a>" “这三个都应该链接出来http://google.com 及" 若我对html文本使用Mov
"All three should link out http://google.com and <a href="http://google.com">here link</a> and <a href="http://google.com">http://google.com</a>"
“这三个都应该链接出来http://google.com 及"
若我对html文本使用MovementMethod,那个么只有第二个和第三个链接是可点击的。
如果我使用Linkify(或两者混合),只有第一个和第二个链接是可点击的
我如何使它们都能点击?
你必须使用反斜杠<代码> \/COD>来描绘<代码> < /Cord>字符,因此字符串不会考虑它作为字符串的最后一点。我是说,当所有文本都在两个代码> >“中时,考虑一个字符串。在你的URL中的字符,因为如果不是,这个字符串会考虑到当他找到一个新的<代码> 字符时,它必须结束,在这种情况下,在你的URL中。"All three should link out http://google.com and <a href=\"http://google.com\">here link</a> and <a href=\"http://google.com\">http://google.com</a>"
“这三个都应该链接出来http://google.com 及"
调查之后,我发现Linkify.addLinks()方法从文本中删除当前跨距并应用新跨距一次(基于例如网页url)。因此,我的Html跨距。fromHtml()从一开始就被删除,不再应用
所以我做了以下几点:1.阅读HTMLHTML.fromHtml中的文本,该文本提供了带有Html跨距的跨距obj。
2.从数组中的html保存跨距
3.Make linkify.addLinks-此方法删除我的旧跨距,因此我必须将其添加回
4.添加旧跨度
5.将文本设置为文本视图 实施:
private void setLabel(){
label.setText(linkifyHTML(Html.fromHtml("text with links here"));
label.setMovementMethod(LinkMovementMethod.getInstance());
label.setLinkTextColor(getRes().getColor(R.color.link));
}
private Spannable linkifyHTML(CharSequence text) {
Spannable s = new SpannableString(text);
URLSpan[] old = s.getSpans(0, s.length(), URLSpan.class);
LinkSpec oldLinks[] = new LinkSpec[old.length];
for (int i = 0; i < old.length; i++) {
oldLinks[i] = new LinkSpec(old[i], s.getSpanStart(old[i]), s.getSpanEnd(old[i]));
}
Linkify.addLinks(s, Linkify.ALL);
for (LinkSpec span : oldLinks) {
s.setSpan(span.span, span.start, span.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return s;
}
class LinkSpec {
final URLSpan span;
final int start, end;
public LinkSpec(URLSpan urlSpan, int spanStart, int spanEnd) {
span = urlSpan;
start = spanStart;
end = spanEnd;
}
}
private void setLabel(){
label.setText(linkifyHTML(Html.fromHtml(“此处有链接的文本”));
label.setMovementMethod(LinkMovementMethod.getInstance());
label.setLinkTextColor(getRes().getColor(R.color.link));
}
私有可扩展链接化HTML(字符序列文本){
Spannable s=新SpannableString(文本);
URLSpan[]old=s.getspan(0,s.length(),URLSpan.class);
LinkSpec oldLinks[]=新LinkSpec[old.length];
for(int i=0;i
Man…这是最完美的答案之一!!现在链接显示正确。但不是所有链接都能点击。例如:没有https://或web URL不在标记内。有没有解决方案?它从html字符串中删除了
标记。