Linkify是一个辅助类,通过RegEx样式匹配,自动地在TextView类(和继承的类)中创建超链接。符合特定的RegEx样式的文本会被转变成可点击的超链接,这些超链接隐式的调用startActivity(new Intent(Intent.ACTION_VIEW,uri))
符合的文本会作为目标URI
你可以指定任意的字符串样式为链接,方便的,Linkify类提供了与之的通用内容类型(如电话号码和e-mail、web地址)
本地的连接类型
Linkify.addLinks 静态方法接受一个View来制作连接,还包括一个或多个默认内容类型的结果。Linkify类提供了一些内容类型:WEB_URLS、EMAIL_ADDRESSES、PHONE_NUMBERS和ALL。当点击时,会相应的打开浏览器或e-mail应用程序
Linkify.addLinks(textView,Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES);或是android:autoLink
创建自定义的连接字符串
为了定义自己的连接字符串,你需要创建一个RegEx样式来匹配文本,进而显示超链接。和本地类型一样,通过调用Linkify.addLinks来指定目标View,但传入的是新的RegEx样式。
接下来的例子显示了一个View链接到由Android Content Provider(下一章你会创建)提供的地震数据。与包含所有的情况相比,链接样式能匹配任何以“quake”开头后跟一个数字的文本。在Intent被触发前,内容会被添加到URI上。
int flags = Pattern.CASE_INSENSITIVE;
Pattern p = Pattern.compile(“\\bquake[0-9]*\\b”, flags);
Linkify.addLinks(myTextView, p, “content://com.paad.earthquake/earthquakes/”);
Linkify还支持TranformFilter和MatchFilter接口。它们提供一些对目标URI的额外控制和定义匹配字符串,它们的使用如下的框架代码所示:
Linkify.addLinks(myTextView, pattern, prefixWith, new MyMatchFilter(), new MyTransformFilter());
使用Match Filter
在你定义的MatchFilter中实现acceptMatch方法,来为RegEx样式匹配添加额外的条件。当一个潜在的匹配发现时,acceptMatch被触发,匹配的开始点和结束点(包括被查找的整个文本)以参数的形式传入。
接下来的代码显示了一个MatchFilter的实现,它取消任何之前是一个“!”的匹配。
class MyMatchFilter implements MatchFilter {
public boolean acceptMatch(CharSequence s, int start, int end) {
return (start == 0 || s.charAt(start-1) != ‘!’);
}
}
使用Transform Filter
Transform Filter为格式化文本字符串提供了更大的自由度,允许你修改由链接文本自动生成的隐式URI。减少链接文本和目标URI的耦合能更加自由地决定如何显示数据字符串给用户。
使用Transform Filter,在你定义的TransformFilter中实现transformUrl方法。当Linkify找到正确的匹配后,它会调用transformUrl,传入使用的RegEx样式和它创建的默认URI字符串。你可以修改匹配的字符串,然后返回一个适合给其它Android应用程序“看”的URI。
下面的TransformFilter实现将匹配的文本转换成小写的URI:
class MyTransformFilter implements TransformFilter {
public String transformUrl(Matcher match, String url) {
return url.toLowerCase();
}
}
分享到:
相关推荐
android-linkify android linkify SpannableString
android 具有正确表达式的TextView Linkify规则
本篇文章小编为大家介绍,在Android中 自动判断是电话,网址,EMAIL方法之Linkify的使用。需要的朋友参考下
Android automatically determines whether the input is a phone
Andoid自动判断输入是电话,网址或者Email的方法----Linkify的应用,本教程主讲的是,当我们在一个EditText输入电话或者网址还是Email的时候,让Android自动判断,当我们输入的是电话,我们点击输入内容将调用打电话程序,...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 ...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 ...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 ...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 -p160 5.4 自制发送Email程序——Intent在Email上...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的...
android自带的链接有电话号码,网址,邮箱。对@xxx与#xxx#等类型没有链接,这时候需要自定义链接。该资源就是以此基础设计的。代码简单明了,易学。
When android:autoLink="all" or Linkify.addLinks(textView, Linkify.ALL) is used to add links to web URLs, phone-numbers, map addresses or email addresses in a TextView, Android uses a class known as ...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 -p160 5.4 自制发送Email程序——Intent在Email上...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 -p160 5.4 自制发送Email程序——Intent在Email上...
第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 -p160 5.4 自制发送Email程序——Intent在Email上...
5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 ...
当然也可以在java代码里 做,textView01.setAutoLinkMask(Linkify.ALL); 2.将要处理的文字写到一个资源文件,如string.xml,然后的java代码里引用(直接写在代码了是不可行的,会直接把文字都显示处理) 3.用Html类的...