19

我动态创建一个 TextView 并希望将文本设置为可链接。文本值为“谷歌”。我提到了这样的互联网和博客它的显示方式相同,但我无法产生预期的结果。

我尝试了不同的方法,但我看到的输出是只有文本的整个文本。我尝试过的代码是:

TextView tv1 = new TextView(this);
tv1.setLayoutParams(textOutLayoutParams);
// Make Linkable
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv1.setText(Html.fromHtml(l.getLeftString()));

/*SpannableString s = new SpannableString(l.getLeftString());
Linkify.addLinks(s, Linkify.WEB_URLS);
tv1.setText(s);                 
tv1.setMovementMethod(LinkMovementMethod.getInstance());
*/
dialogLayout.addView(tv1);

在我的输出中,我看到“ Google ”并且没有链接。我也尝试过清洁项目并再次构建它,但没有成功。我希望只看到带有蓝色下划线的“Google”(默认),点击 Google 时,浏览器会打开http://google.com

我的代码中缺少什么来获取输出?顺便说一句对于 REF:我使用 64 位 Win 7、Java、Eclipse、Android API 8-2.2

非常感谢任何帮助。

4

6 回答 6

45

我终于用下面的代码让它工作了:

TextView tv1 = new TextView(this);
tv1.setLayoutParams(textOutLayoutParams);
tv1.setText(Html.fromHtml("<a href=\""+ l.getRightString() + "\">" + l.getLeftString() + "</a>"));
tv1.setClickable(true);
tv1.setMovementMethod (LinkMovementMethod.getInstance());
dialogLayout.addView(tv1);

l.getRightString() - 包含类似 http:\www.google.com 的网址 l.getLeftString() - 包含类似“Go to Google”的网址文本

结果:在我的对话框上用蓝色和带下划线的文本“Go to Google”,点击它,浏览器打开并显示相应的页面。在返回/退出浏览器时,它会再次从它离开的状态进入应用程序。

希望这可以帮助。

于 2012-08-27T08:41:29.923 回答
12

将您的 html 保存在字符串中

<string name="link">&lt;a href="http://www.google.com">Google&lt;/a></string>

将文本视图 ID 设置为

textViewLinkable

在主要活动中使用以下代码:

((TextView) findViewById(R.id.textViewLinkable)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.textViewLinkable)).setText(Html.fromHtml(getResources().getString(R.string.link)));
于 2012-08-25T09:00:51.573 回答
7

我也面临着我使用以下解决的同样问题

String str_text = "<a href=http://www.google.com >Google</a>";
TextView link;
link = (TextView) findViewById(R.id.link);
link.setMovementMethod(LinkMovementMethod.getInstance());
link.setText(Html.fromHtml(str_text));

用于将链接颜色更改为蓝色使用

link.setLinkTextColor(Color.BLUE);
于 2015-04-08T09:51:53.400 回答
7

这是我在 Android N 上测试的简单实现。

String termsText = "By registering, you are agree to our";
String termsLink = " <a href=https://www.yourdomain.com/terms-conditions.html >Terms of Service</a>";
String privacyLink = " and our <a href=https://www.yourdomain.com/privacy-policy.html >Privacy Policy</a>";
String allText = termsText + termsLink + privacyLink;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    ((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance());
    ((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText, Html.FROM_HTML_MODE_LEGACY));
} 
else {
    ((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance());
    ((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText));
}
于 2016-11-25T08:45:50.870 回答
3
txtview.setMovementMethod(LinkMovementMethod.getInstance());

将此语句传递给您的文本视图,并在 string.xml 中将字符串设置为

<string name="txtCredits"> <a href="http://www.google.com"></a></string>

现在将这个字符串名称“android:text="@string/txtCredits" 传递给 txtview 所在的 xml 类。

于 2016-02-19T08:00:07.943 回答
0

在 GitHub 上使用此代码autolink-java

像这样

private String getLink(String string){

    LinkExtractor linkExtractor = LinkExtractor.builder()
            .linkTypes(EnumSet.of(LinkType.URL)) // limit to URLs
            .build();
    Iterable<Span> spans = linkExtractor.extractSpans(string);

    StringBuilder sb = new StringBuilder();
    for (Span span : spans) {
        String text = string.substring(span.getBeginIndex(), span.getEndIndex());
        if (span instanceof LinkSpan) {
            // span is a URL
            sb.append("<a href=\"");
            sb.append(text);
            sb.append("\">");
            sb.append(text);
            sb.append("</a>");
        } else {
            // span is plain text before/after link
            sb.append(text);
        }
    }

    return sb.toString();  // "wow <a href=\"http://test.com\">http://test.com</a> such linked"
}
于 2019-06-14T04:53:07.923 回答