Android 具有多个超链接的文本视图

Android 具有多个超链接的文本视图,android,hyperlink,textview,Android,Hyperlink,Textview,例如,我有以下字符串 \n3门以下是一个http://www.last.fm/tag/post-grunge\“class=”bbcode\u tag\”rel=”tag\“>来自美国密西西比州埃斯卡塔帕的post grunge乐队,成立于1996年,由布拉德·阿诺德(声乐)、马特·罗伯茨(吉他)、托德·哈雷尔(贝斯)、克里斯·亨德森(吉他)和格雷格·厄普丘奇(鼓)组成.乐队于2000年与环球唱片公司签约发行第一张专辑,http://www.last.fm/music/3+Doors+Down/

例如,我有以下字符串

\n3门以下是一个http://www.last.fm/tag/post-grunge\“class=”bbcode\u tag\”rel=”tag\“>来自美国密西西比州埃斯卡塔帕的post grunge乐队,成立于1996年,由布拉德·阿诺德(声乐)、马特·罗伯茨(吉他)、托德·哈雷尔(贝斯)、克里斯·亨德森(吉他)和格雷格·厄普丘奇(鼓)组成.乐队于2000年与环球唱片公司签约发行第一张专辑,http://www.last.fm/music/3+Doors+Down/The+Better+Life\'class=\\'bbcode\U album\>The Better Life。随着单曲的发行,他们受到了国际关注http://www.last.fm/music/3+Doors+Down/\uU/Kryptonite\“class=”bbcode\u track\“>Kryptonite”。这张专辑销量超过600万张。\n\nhttp://www.last.fm/music/3+门+下\“>阅读更多关于Last.fm上3个Doors Doors Doors Doors的信息。\n\n\n用户提供的文本可在Creative Commons By SA许可证下获得,也可在GNU FDL下获得。\n

我想在文本视图中显示整个字符串,并单击超链接。我也不想看到实际的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 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);
TextView电视=。。。。
setMovementMethod(LinkMovementMethod.getInstance());
字符串内容=tv.getText().toString();
列表链接=新建ArrayList();
Pattern p=Patterns.WEB\u URL;
匹配器m=p.Matcher(内容);
while(m.find()){
字符串urlStr=m.group();
links.add(urlStr);
}
SpannableString f=新的SpannableString(内容);
对于(int i=0;i
不幸的是,这似乎根本无法清除超链接中的URL。它们仍然在线显示。InternalURLSpan是ClickableSpan的一个扩展类,除了一个事件处理程序重写之外,没有其他功能?
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);