方式一:在布局文件中给TextView制定autoLink属性,例如:
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="email"
android:layout_marginTop="30dp"
android:text="你好www.baidu.com是的吗"/>
其中autoLink的属性值包括none,web,email,phone,map,all,这些属性值都是自动识别的,不用做任何处理
另外,对于autoLink属性,我们也可以在java代码中指定:
tv.setAutoLinkMask(Linkify.WEB_URLS);
方式二:通过java代码自定义链接,添加单击事件
public class MainActivity extends ActionBarActivity{
private int systemVersion;
private TextView tv;
static Context ctx = null ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linearlayout);
ctx = this ;
tv = (TextView) findViewById(R.id.tv);
String htmlLinkText=
"麻烦请<a href='aaa'>点击</a>这里的高规格的奋斗奋斗粉丝粉丝都刚刚<a href='bbb'>三国杀</a>广东省三国杀的广东分公司对该公司对刚刚SD敢达干豆腐";
tv.setText(Html.fromHtml(htmlLinkText)); //将字符串格式化成html文本
tv.setMovementMethod(LinkMovementMethod.getInstance());//使TextView可以执行链接
// tv.setAutoLinkMask(Linkify.WEB_URLS);
CharSequence text = tv.getText();
if (text instanceof Spannable){
int end = text.length();
Spannable sp = (Spannable)tv.getText();
//获取textView中的多个链接组成数组
URLSpan[] urls = sp.getSpans( 0 , end, URLSpan. class );
SpannableStringBuilder style = new SpannableStringBuilder(text);
style.clearSpans(); // should clear old spans
for (URLSpan url : urls){
MyURLSpan myURLSpan = new MyURLSpan(url.getURL());
//给链接设置样式等,例如链接处的下划线,字体颜色等,及其单击事件的添加
style.setSpan(myURLSpan,sp.getSpanStart(url),sp.getSpanEnd(url),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(style);
}
}
private static class MyURLSpan extends ClickableSpan{
private String mUrl;
MyURLSpan(String url) {
mUrl = url;
}
@Override
public void onClick(View widget) {
// TODO Auto-generated method stub
//当textView中有多个连接要执行时,可以根据mUrl来区分是哪一个链接没单击了,例如这里的两个链接分别是aaa和bbb
Toast.makeText(ctx, " hello! "+mUrl ,Toast.LENGTH_LONG).show();
}
}
}