Android:textview超链接

Pew*_*abs 50 android hyperlink textview

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

谷歌stackoverflow

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

And*_*rei 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());
Run Code Online (Sandbox Code Playgroud)

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

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

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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

stripUnderlines(Text1);
stripUnderlines(Text2);
Run Code Online (Sandbox Code Playgroud)

  • 注意:如果您已在TextView的属性中设置自动链接某些属性,那么这将不起作用!如果有,你必须在调用setText()之前调用`textView.setAutoLinkMask(0);` (2认同)

小智 52

TextView t2 = (TextView) findViewById(R.id.textviewidname);
t2.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)

<string name="google_stackoverflow"><a href="https://stackoverflow.com/questions/9852184/android-textview-hyperlink?rq=1">google stack overflow</a></string>
Run Code Online (Sandbox Code Playgroud)

链接是" Android:textview超链接 "

标签是"google stack overflow"

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

  • 我最喜欢你的方式.恕我直言,这是最干净的. (3认同)

M-R*_*avi 17

android:autoLink="web"如果HTML中包含完整链接,则可以正常工作.以下内容将以蓝色突出显示并可单击:


Hul*_*ulk 14

这很简单的方法---

在你的活动中 -

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

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

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


Anu*_*san 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>
Run Code Online (Sandbox Code Playgroud)

  • 确保您在autolink属性中没有选择任何内容.如果在自动链接属性中选择了任何内容,则LinkMovementMethod.getInstance()不适用于该textview (2认同)