获取Android EditText中点击链接的URL或HTML

时间:2013-08-28 07:20:06

标签: java android android-edittext spannable

我正在 EditText 检索所点击链接的网址。我想触摸一个链接,然后用它的URL做一些事情。我得到的最接近的是确定光标所在的跨度是否为URLSpan样式:

int s1 = Math.max(mText.getSelectionStart(), 0);
int s2 = Math.max(mText.getSelectionEnd(), 0);
Spannable raw = new SpannableString(mText.getText());
CharacterStyle[] spans = raw.getSpans(s1, s2, CharacterStyle.class);
for (CharacterStyle span : spans) {
    if(span.getClass().equals(android.text.style.URLSpan.class)){
        //is a link, but what is the URL?

    }
}

如果我将它全部转换为HTML字符串,那么我不知道如何将纯文本的光标位置与html文本相关联。我可以使用getUrls()获取EditText中的所有网址,但仍然不知道哪个网址被点击了。如果我可以做一些像EditText.getPortion(start, end).getUrls()这样的事情,那就更接近了,但到目前为止我还没有看到类似的方法。

2 个答案:

答案 0 :(得分:2)

试试这段代码,

EditText editText = (EditText) findViewById(R.id.edittext);
editText.setText(someContent);
Linkify.addLinks(editText, Linkify.ALL);
Log.d(TAG, "HTML: " + Html.toHtml(editText.getEditableText()));

并且也参见本教程,

http://developer.android.com/reference/android/text/util/Linkify.html

答案 1 :(得分:0)

我意识到这是一个4岁的回复,但要回答未来的访问者:

for (CharacterStyle span : spans) {
    if(span.getClass().equals(android.text.style.URLSpan.class)){
        //you almost had it here, just cast the span as a URLspan
        URLSpan u = (URLSpan)spans[j];
        String span_url = u.getURL();
    }
}