如何从android中的textview中获取单击的文本部分?

时间:2018-05-12 13:50:27

标签: java android string

我在单个textView中有多个文本行。就像这样:

您好\ n www.google.com \ n

由于我已设置android:autoLink="web",因此www.google.com会在我的手机浏览器中打开。但是,我想知道何时按下此文本以便我可以使用该值并打开链接,因为我想在另一个活动中解析此链接的输出。但是我无法根据此URL的点击调用自定义方法,它只会默认打开浏览器。

或者,如果我可以获得点击的文字,那就太棒了。 由于每个文本行都以“\ n”结尾,我想得到那一行。让我们说上面的例子我点击H,我想得到你好,以便我可以将它用于其他目的。有什么办法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

android:autoLink="web"是一个抽象,代表您处理onClicks。如果您打算自己处理点击,那么您必须为其执行自定义实施。

您可以按照以下SO说明此方法:

protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
{
    int start = strBuilder.getSpanStart(span);
    int end = strBuilder.getSpanEnd(span);
    int flags = strBuilder.getSpanFlags(span);
    ClickableSpan clickable = new ClickableSpan() {
        public void onClick(View view) {
            // Do something with span.getURL() to handle the link click...
        }
    };
    strBuilder.setSpan(clickable, start, end, flags);
    strBuilder.removeSpan(span);
}

protected void setTextViewHTML(TextView text, String html)
{
    CharSequence sequence = Html.fromHtml(html);
    SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
    URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);   
    for(URLSpan span : urls) {
        makeLinkClickable(strBuilder, span);
    }
    text.setText(strBuilder);
    text.setMovementMethod(LinkMovementMethod.getInstance());       
}