Android TextView超链接

时间:2016-08-07 10:00:50

标签: android hyperlink textview

我正在使用包含两个超链接的字符串实现TextView,如下所示,但链接没有打开新的浏览器窗口:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="#ffffff"
        android:paddingLeft="50dp"
        android:paddingRight="50dp"
        android:textSize="14sp"
        android:clickable="true"
        android:linksClickable="true"
        android:textColorLink="@color/colorPrimary"
        android:autoLink="web"
        android:text="@string/agree_terms_privacy"/>

在string.xml中

<string name="agree_terms_privacy">By continuing, you agree to our <a href="http://link1/terms">Terms of Use</a> and read the <a href="http://link1/privacy">Privacy Policy</a></string>

8 个答案:

答案 0 :(得分:18)

在查看多个Stack Overflow帖子后,这个解决方案对我有用。我已根据您的实施量身定制了它:

1. 删除自动链接以支持使用LinkMovementMethod,并将linksClickable设置为true

<TextView
    android:id="@+id/termsOfUse"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:textColor="#ffffff"
    android:paddingLeft="50dp"
    android:paddingRight="50dp"
    android:textSize="14sp"
    android:clickable="true"
    android:linksClickable="true"
    android:textColorLink="@color/colorPrimary"
    android:text="@string/agree_terms_privacy"/>

如果您使用android:autoLink="web"属性,那么在调用TextView上的textView.setAutoLinkMask(0);之前,您必须使用setText()覆盖它。您也可以将链接设置为在您的活动中可点击,如果您愿意,可以在Harshal的答案中设置,但我离开了它,因为您已经在布局中使用了它。我还在你的TextView中添加了一个名为termsOfUse的ID,我们稍后会使用它。

2. 替换&lt;在strings.xml中使用&lt;并删除网址周围的双引号

这是因为当您检索字符串资源时,它不会正确解析嵌入的html,并且由于某种原因它不会转义双引号。所以而不是:

<string name="agree_terms_privacy">By continuing, you agree to our <a href="http://link1/terms">Terms of Use</a> and read the <a href="http://link1/privacy">Privacy Policy</a></string>

你想做的事:

<string name="agree_terms_privacy">By continuing, you agree to our &lt;a href=http://link1/terms>Terms of Use&lt;/a> and read the &lt;a href=http://link1/privacy>Privacy Policy&lt;/a></string>

第3。解析字符串资源并将其绑定到TextView

Spanned policy = Html.fromHtml(getString(R.string.agree_terms_privacy));
TextView termsOfUse = (TextView)findViewById(R.id.termsOfUse);
termsOfUse.setText(policy);
termsOfUse.setMovementMethod(LinkMovementMethod.getInstance());

注意: Html.fromHtml已在API 24中弃用(有关如何根据需要处理此问题的详细信息,请参阅this post)。我们使用此方法从字符串中获取预期的HTML格式。

答案 1 :(得分:9)

看一下下面的代码片段,希望它有所帮助,

$(document).on('click', '.spant', function () {
    var a = $(this).prevAll('.spant').addBack();
    var b='';
    for (var i=0;i<a.length;i++)
      b=b+a[i].outerHTML;
    console.log(b);
    localStorage.setItem('path', b);
});

答案 2 :(得分:4)

这项工作对我来说

在textview中添加: 机器人:自动链接=“所有” 机器人:可点击= “真”

https://www.youtube.com/watch?v=UnJxyfyDyHU

我希望这对你有所帮助。

答案 3 :(得分:1)

我建议你有两个TextViews,因为你需要两个不同的行动:

TextView yourTermsOfUseTextView = (TextView) findViewById(R.id.your_id);
yourTermsOfUseTextView.setOnclickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(your_download_link));
                    startActivity(myIntent);
                }
            });

重复隐私政策。

答案 4 :(得分:1)

您可以像下面这样使用。.

  1. textview xml

    <TextView
     android:id="@+id/tv_welcome_message"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"            
     android:textSize="16sp"/>
    
  2. 活动中

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

答案 5 :(得分:0)

只需在您的 Textview

中添加以下代码
android:autoLink="email"   

答案 6 :(得分:0)

MainActivity.java

 TextView t2 = (TextView) findViewById(R.id.text2);
    t2.setMovementMethod(LinkMovementMethod.getInstance());

我删除了TextView上的大多数属性以匹配演示中的内容

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/txtCredits"/>

如果您正在调用setMovementMethod(),请不要忘记删除autoLink =“ web”

答案 7 :(得分:0)

只需使用Linkify

textView.text = text
Linkify.addLinks(textView, Linkify.WEB_URLS)