Android:textview超链接

时间:2012-03-24 13:37:13

标签: android hyperlink textview

我知道如果你在textview中放置一个链接它会起作用但是如果我想显示例如:

谷歌 计算器

而不是整个链接(只是标签) 如何使这些链接可以点击?

9 个答案:

答案 0 :(得分:60)

您可以有两个单独的TextView,如果需要,您可以在布局中相应地对齐它们:

    Text1.setText(
        Html.fromHtml(
            "<a href=\"http://www.google.com\">google</a> "));
    Text1.setMovementMethod(LinkMovementMethod.getInstance());

    Text2.setText(
            Html.fromHtml(
                "<a href=\"http://www.stackoverflow.com\">stackoverflow</a> "));
    Text2.setMovementMethod(LinkMovementMethod.getInstance());

然后,如果你想剥离“链接下划线”。创建一个类:

public class URLSpanNoUnderline extends URLSpan {
    public URLSpanNoUnderline(String url) {
        super(url);
    }
    @Override public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);
        }
}

然后在主Activity类中添加此方法,其中包含TextViews

private void stripUnderlines(TextView textView) {
    Spannable s = new SpannableString(textView.getText());
    URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
    for (URLSpan span: spans) {
        int start = s.getSpanStart(span);
        int end = s.getSpanEnd(span);
        s.removeSpan(span);
        span = new URLSpanNoUnderline(span.getURL());
        s.setSpan(span, start, end, 0);
    }
    textView.setText(s);
}

然后在初始化TextViews之后(在你的onCreate中)调用它:

stripUnderlines(Text1);
stripUnderlines(Text2);

答案 1 :(得分:49)

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

<string name="google_stackoverflow"><a href="https://stackoverflow.com/questions/9852184/android-textview-hyperlink?rq=1">google stack overflow</a></string>

链接是“Android: textview hyperlink

标签是“google stack overflow”

定义java中的第一个代码块和strings.xml文件中的第二个代码块。另外,请务必在java中的页面布局中引用textView的id。

答案 2 :(得分:15)

如果您的HTML中包含完整链接,

android:autoLink="web"就会起作用。以下内容将以蓝色突出显示并可单击:

答案 3 :(得分:13)

非常简单的方法---

在您的活动中 -

 TextView tv = (TextView) findViewById(R.id.site);
 tv.setText(Html.fromHtml("<a href=http://www.stackoverflow.com> STACK OVERFLOW "));
 tv.setMovementMethod(LinkMovementMethod.getInstance());

然后你会得到标签,而不是整个链接..

希望它能帮到你......

答案 4 :(得分:6)

这应该有效。

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

and

<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/txtCredits"
android:id="@+id/text2"
 android:layout_centerInParent="true"
android:layout_marginTop="20dp"></TextView>

答案 5 :(得分:2)

这是我的工作实施

private void showMessage()
    {

        lblMessage.setText("");

        List<String> messages = db.getAllGCMMessages();

        for (int k = messages.size() - 1; k >= 0; --k)
         {

            String message  =  messages.get(k).toString();
            lblMessage.append(message + "\n\n");

         }
     Linkify.addLinks(lblMessage, Linkify.ALL);
  }

并且要更改超链接的颜色,我编辑了我的xml for textview -

 android:textColorLink="#69463d"

答案 6 :(得分:2)

我遇到了同样的问题,终于找到了可行的解决方案。

    在string.xml文件中
  1. ,定义:

    <string name="textWithHtml">The URL link is &lt;a href="http://www.google.com">Google&lt;/a></string>
    
  2. 替换“&lt;”小于HTML转义字符的字符。

    1. 在Java代码中:

      String text = v.getContext().getString(R.string.textWithHtml);
      textView.setText(Html.fromHtml(text));
      textView.setMovementMethod(LinkMovementMethod.getInstance());
      
    2. TextBox将正确显示带有可点击锚链接的文本

答案 7 :(得分:1)

数据绑定呢?

@JvmStatic
@BindingAdapter("textHtml")
fun setHtml(textView: TextView, resource: String) {
    val html: Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml(resource, Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml(resource)
    }

    textView.movementMethod = LinkMovementMethod.getInstance()
    textView.text = html
}

strings.xml

<string name="text_with_link">&lt;a href=%2$s>%1$s&lt;/a> </string>

在您的layout.xml中

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:textHtml="@{@string/text_with_link(model.title, model.url)}"
            tools:text="Some text" />

其中xml中的标题和链接是一个简单的字符串

还可以将多个参数传递给数据绑定适配器

@JvmStatic
@BindingAdapter(value = ["textLink", "link"], requireAll = true)
fun setHtml(textView: TextView, textLink: String?, link: String?) {
    val resource = String.format(textView.context.getString(R.string.text_with_link, textLink, link))

    val html: Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml(resource, Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml(resource)
    }

    textView.movementMethod = LinkMovementMethod.getInstance()
    textView.text = html
}

和.xml中的单独传递参数

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:link="@{model.url}"
            app:textLink="@{model.title}"
            tools:text="Some text" />

答案 8 :(得分:0)

使用

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autoLink="web"
    android:text="www.google.com" />

此标志

  

autolink =“ web”

控制是否自动找到诸如url之类的链接并将其转换为可点击的链接。默认值为“ none”,禁用此功能。 值:全部,电子邮件,地图,无,电话,网络。