Linkify是一个辅助类,通过RegEX样式匹配,自动在TextView类中创建超链接。符合特定的RegEX样式的文本会被转变成可点击的超链接,这些超链接隐式地调用startActivity(new Intent(Intent.ACTION_VIEW,uri)),符合的文本作为目标URI。用户可以指定任意的字符串样式为链接;为了更加方便,Linkify类提供了预置的通用内容类型(如电话号码和email,web地址等)。
1. 本地的链接类型
Linkify.addLinks静态方法能够接受一个View来制作链接,即实现View内容和系统之间的链接。Linkify类提供了一些内容类型:WEB_URLS,EMAIL_ADDRESSES,PHONE_NUMBERS和ALL。
代码中:
tv=(TextView)findViewById(R.id.mv);
Linkify.addLinks(tv, Linkify.PHONE_NUMBERS|Linkify.EMAIL_ADDRESSES|Linkify.WEB_URLS);
XML文件中:
<TextView
android:id="@+id/mv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/linkify_me"
android:autoLink="phone|email|web"
/>
2. 创建自定义的链接字符串
tv1=(TextView)findViewById(R.id.mv1);
int flags=Pattern.CASE_INSENSITIVE;
Pattern p=Pattern.compile("\\bquake[0-9]*\\b",flags);
Linkify.addLinks(tv1,p,"http://www.baidu.com/s?wd=");//pattern的文字会追加到link后面
3. 支持TransformFilter和MatchFilter接口
Linkify还支持TranformFilter和MatchFilter接口。它们提供一些对目标URI的额外控制和定义匹配字符串,它们的使用如下的框架代码所示
Linkify.addLinks(myTextView, pattern, prefixWith,
new MyMatchFilter(), new MyTransformFilter());
4. 使用Match Filter
在你定义的MatchFilter中实现acceptMatch方法,来为RegEx样式匹配添加额外的条件。当一个潜在的匹配发现时,acceptMatch被触发,匹配的开始点和结束点(包括被查找的整个文本)以参数的形式传入。
class MyMatchFilter implements MatchFilter {
public boolean acceptMatch(CharSequence s, int start, int end) {
return (start == 0 || s.charAt(start-1) != ‘!’);
} }
5. 使用Transform Filter
Transform Filter为格式化文本字符串提供了更大的自由度,允许你修改由链接文本自动生成的隐式URI。减少链接文本和目标URI的耦合能更加自由地决定如何显示数据字符串给用户。
class MyTransformFilter implements TransformFilter {
public String transformUrl(Matcher match, String url) {
return url.toLowerCase();
}
}