1

我有例如以下字符串

\n 3 Doors Down 是来自美国密西西比州埃斯卡托帕的 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\">更好的生活。随着单曲“http://www.last.fm/music/3+Doors+Down/_/Kryptonite\”class=\"bbcode_track\">Kryptonite"的发行,他们受到了国际关注。这张专辑继续销量超过 600 万张。\n\n http://www.last.fm/music/3+Doors+Down\">

我想在带有可点击超链接的文本视图中显示整个字符串。我也不想看到实际的 url,只是显示代替 url 的文本。阅读有关该主题的其他帖子,他们都建议定义类似于此的文本视图

<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());

当我按照这些步骤操作时,我的链接是可点击的,但是它们并没有按我的意愿显示。我错过了什么?

这是它当前外观的示例。

就快到了

4

1 回答 1

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);
于 2013-03-11T05:32:37.630 回答