注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

Linkify简介  

2011-09-28 13:44:55|  分类: Android基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文参照自:http://www.cnblogs.com/xirihanlin/archive/2009/07/29/1534030.html
android.text.util.Linkify是一个辅助类,通过RegEx样式匹配,自动地在TextView类(和继承的类)中创建超链接。 
符合特定的RegEx样式的文本会被转变成可点击的超链接,这些超链接隐式地调用startActivity(new Intent(Intent.ACTION_VIEW, uri)),符合的文本会作为目标URI。
 你可以指定任意的字符串样式为链接。为了方便,Linkify类提供了4种预置的通用内容类型(电子邮箱地址电话号码web地址住所地址)。
一、本地的链接类型
Linkify通过静态方法addLinks()接受一个TextView来制作链接。为了方便,Linkify类内置提供4种类型的内容的匹配和超链接型:WEB_URLSEMAIL_ADDRESSESPHONE_NUMBERSMAP_ADDRESSES.
WEB_URLS表示对web地址进行超链接。点击它,系统将调浏览器来打开该地址
EMAIL_ADDRESSES表示对电子邮箱地址进行超链接。点击它,系统将调用e-mail应用程序,并新建一个以该电子邮箱地址为目的地的邮件。
PHONE_NUMBERS表示对电话号码进行超链接。点击它,系统将调用dialer应用程序,并对该号码进行拨号
MAP_ADDRESSES表示对住所地址进行超链接,系统将调用google地图,并定位到该地址。注意,Linkify现在系统只能匹配美国的住所地址。
WEB_URLSEMAIL_ADDRESSESPHONE_NUMBERSMAP_ADDRESSES这4项可以进行任何位或"|"的组合,以表示对几项都进行超链接。
All是“WEB_URLS | EMAIL_ADDRESSES | PHONE_NUMBERS | MAP_ADDRESSES”的组合,表示对电子邮箱地址、电话号码、web地址和住所地址都进行超链接。
下面的代码片段演示如何对TextView内容中的电子邮箱地址、电话号码、web地址进行超链接
TextView textView = (TextView)findViewById(R.id.myTextView);
Linkify.addLinks(textView, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES|Linkify.PHONE_NUMBERS);
你可以在layout资源里使用android:autoLink特性来为View制作链接。它支持一个或多个(用|分割)自定义的值:none、web、email、phone或all。接下来的XML片段显示了如何为WEB地址、电话号码和e-mail地址添加超链接:
<TextView
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:text=”@string/linkify_me”
android:autoLink=”web|phone|email”
/>
二、使用自定义的超链接规则
为了使用自己的超链接规则,你可以使用addLinks (TextView text, Pattern pattern, String scheme)函数来定制个性化得超链接。
它表示对TextView text的符合 Pattern pattern的内容进行超链接,并把String scheme作为超链接的URL的前缀。
当链接点击时,Linkify会用String scheme添加作为前缀和超链接文本合成真正的超链接URI,然后调用startActivity(new Intent(Intent.ACTION_VIEW, uri))
下面的例子显示了一个View链接到由Android Content Provider提供的地震数据。与包含所有的情况相比,链接样式能匹配任何以“quake”开头后跟一个数字的文本。
int flags = Pattern.CASE_INSENSITIVE;
Pattern p = Pattern.compile(“\\bquake[0-9]*\\b”, flags);
Linkify.addLinks(myTextView, p, “content://com.paad.earthquake/earthquakes/”);
三、使用Match Filter和ransform Filter
Linkify在进行超链接时,可以使用

 addLinks (Spannable s, Pattern p, String scheme, Linkify.MatchFilter matchFilter, Linkify.TransformFilter transformFilter)

来进行TranformFilterMatchFilter的支持。
你可以在你定义的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为格式化文本字符串提供了更大的自由度,允许你修改由链接文本自动生成的隐式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();
}
}
 
  评论这张
 
阅读(741)| 评论(0)