Linkify简介

本文参照自: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_URLS EMAIL_ADDRESSES PHONE_NUMBERS MAP_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地址添加超链接:
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)

来进行T ranformFilter MatchFilter 的支持。
你可以在你定义的 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();
}
}

你可能感兴趣的:(Android基础)