我有以下字符串
\ n 3 Doors Down是来自Escatawpa的http://www.last.fm/tag/post-grunge \“class = \”bbcode_tag \“rel = \”tag \“> post-grunge乐队,密西西比州,美国,成立于1996年,由Brad Arnold(主唱),Matt Roberts(吉他),Todd Harrell(贝司),Chris Henderson(吉他)和Greg Upchurch(鼓)组成。乐队于2000年签约环球唱片公司他们的第一张专辑,http://www.last.fm/music/3+Doors+Down/The+Better+Life \“class = \”bbcode_album \“> The Better Life。随着单曲“http://www.last.fm/music/3+Doors+Down/_/Kryptonite \”class = \“bbcode_track \”> Kryptonite“的发行,他们受到了国际关注。专辑继续发行销售超过600万份。\ n \ n http://www.st.fm/music/3+Doors+Down\">在Last.fm上了解更多关于3门的信息。\ n \ n \ n用户 - 贡献文本可在Creative Commons By-SA许可下获得,也可以在GNU FDL下获得。\ n
我想在textview中显示整个字符串,并且可以点击超链接。我也不想看到实际的网址,只是显示代替网址的文字。阅读有关该主题的其他帖子,他们都建议定义类似于此
的文本视图<TextView
android:id="@+id/tvArtistOverview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:autoLink="web"
android:linksClickable="true" />
并将textview的SetMovementMethod设置为
myTextView.setMovementMethod(LinkMovementMethod.getInstance());
当我按照这些步骤操作时,我的链接是可点击的,但是它们不会按我的意愿显示。我错过了什么?
以下是目前的示例。
答案 0 :(得分:0)
使用以下代码。
TextView tv = ....
tv.setMovementMethod(LinkMovementMethod.getInstance());
String content = tv.getText().toString();
List<String> links = new ArrayList<String>();
Pattern p = Patterns.WEB_URL;
Matcher m = p.matcher(content);
while (m.find()) {
String urlStr = m.group();
links.add(urlStr);
}
SpannableString f = new SpannableString(content);
for (int i = 0; i < links.size(); i++) {
final String url = links.get(i);
f.setSpan(new InternalURLSpan(new OnClickListener() {
public void onClick(View v) {
Context ctx = v.getContext();
String urlToOpen = url;
if (!urlToOpen.startsWith("http://") || !urlToOpen.startsWith("https://"))
urlToOpen = "http://" + urlToOpen;
openURLInBrowser(urlToOpen, ctx);
}
}), content.indexOf(url), content.indexOf(url) + url.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(f);