将SpannableString转换为ClickableSpan

时间:2012-09-05 22:10:23

标签: android linkify spannablestring

我正在尝试在单击时启动活动的文本字符串中创建可单击链接。我使用Linkify()来检测文本中的链接。此功能可以添加文本链接,但只能添加Web URL。我需要将输出转换为ClickableSpan,以便我可以实现this technique

如何将Linkify()的已识别链接转换为指向活动的ClickableSpans?

以下是我在Linkify中使用的代码:

// Linkify parameters
final static Pattern pattern = Pattern.compile("\\[[^]]*]"); // defines the fact that links are bound by [square brackets]
final String scheme = "http://"; // TODO: Currently this is just a blank link
Linkify.addLinks(linkText, pattern, scheme);

2 个答案:

答案 0 :(得分:0)

  

如何将Linkify()的已识别链接转换为指向活动的ClickableSpans?

致电addLinks()后,致电getText()以从Spanned检索TextView对象。此对象将包含一系列URLSpan个对象,每个匹配的链接一个 - 您可以通过调用getSpans()获取这些对象的数组。您需要注意每个跨度的开始和结束位置(通过getSpanStart()getSpanEnd()),删除URLSpan,然后将其替换为您自己的跨度,以执行您想要的操作。

答案 1 :(得分:0)

对于您想要实现的目标,只需覆盖startActivity()中的Activity方法并使用文本中的网址拦截ACTION_VIEW意图,这可能更为简单。像这样:

public class MyActivity extends Activity {

    @Override
    public void startActivity(Intent intent) {
        final String action = intent.getAction();
        if (action.equals(Intent.ACTION_VIEW)) {
            // launch our other activity instead
            Intent ourIntent = new Intent(this, MyOtherActivity.class);
            ourIntent.setData(intent.getData());
            super.startActivity(ourIntent);

            // we're done!
            return;
        }

        // else, normal handling by the framework
        super.startActivity(intent);
    }

    // the rest of your activity code

}

供参考,here's the source code for URLSpan将触发上述startActivity()方法。