我正在尝试在单击时启动活动的文本字符串中创建可单击链接。我使用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);
答案 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()
方法。