如何使TextView中的链接可点击?

大憨熊 提交于 2019-12-14 20:39:56

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我定义了以下TextView:

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="@string/txtCredits"
    android:autoLink="web" android:id="@+id/infoTxtCredits"
    android:layout_centerInParent="true"
    android:linksClickable="true"></TextView>

其中@string/txtCredits是包含<a href="some site">Link text</a> @string/txtCredits <a href="some site">Link text</a>的字符串资源。

Android会突出显示TextView中的链接,但它们不会响应点击。 有人可以告诉我我在做什么错吗? 我是否需要为我的活动中的TextView设置onClickListener,就像这样简单?

看起来它与我定义字符串资源的方式有关。 这不起作用:

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

但这确实是:

<string name="txtCredits">www.google.com</string>

这真是令人讨厌,因为我宁愿显示文本链接而不显示完整的URL。


#1楼

上面的解决方案对我来说不起作用,但是下面的解决方案却可行(而且看起来更干净)。
首先,在字符串资源中,使用HTML实体编码定义标签开头的V形,即:

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

并不是:

<a href="http://www.google.com">Google</a>

通常,像这样对字符串中的所有V形符号进行编码。 顺便说一句,该链接必须以http://开头

然后(如建议在这里 )设置你的TextView此选项:

 android:linksClickable="true"

最后,在代码中执行以下操作:

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));

就是这样,不需要正则表达式或其他手动技巧。


#2楼

只需要在xml的文本视图中添加此内容

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>

#3楼

如果要添加类似HTML的链接,您需要做的是:

  • 添加类似HTML的资源字符串:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • 完全不使用链接特定的配置即可将视图添加到布局中:

     <TextView android:id="@+id/link" android:text="@string/link" />`
  • 以编程方式将适当的MovementMethod添加到TextView中:

     mLink = (TextView) findViewById(R.id.link); if (mLink != null) { mLink.setMovementMethod(LinkMovementMethod.getInstance()); }

而已! 是的,让“ autoLink”和“ linksClickable”之类的选项仅在显式链接上工作(未包装到html标签中)对我也很容易引起误解。


#4楼

我注意到使用android:autoLink="web"

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web"/>

对于URL可以正常工作,但是由于我也有要链接的电子邮件地址和电话号码,因此我最终使用了这行android:autoLink="all"

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:autoLink="all"/>

它就像一种魅力。


#5楼

用这个...

TextView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
                        startActivity(in);
                    }

                });

并在清单文件中添加权限

<uses-permission android:name="android.permission.INTERNET"/>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!