1、讓Textview自動識別鏈接並且做默認跳轉
contentText.setText("www.baidu.com"); contentText.setAutoLinkMask(Linkify.ALL); contentText.setMovementMethod(LinkMovementMethod.getInstance());
以上方法即可實現自動檢測鏈接並以默認瀏覽器跳轉, 但是存在一些問題,它並不能驗證鏈接的正確性,如:
abvcwww.csdn.com 這個也許並不是一個有效鏈接,這個如果要處理的話就自己去寫正則表達式去匹配吧
在安卓源碼 Pattren類中weburl的默認匹配規則:
2、 攔截鏈接點擊事件並自定義處理
1) 添加一個類繼承ClickSpan,實現點擊事件,onClick事件中做自己需要的操作
public class BroadcastUrlSpan extends ClickableSpan { private String url; public BroadcastUrlSpan(String url) { this.url = url; } @Override public void onClick(View widget) { if(url != null) { Context context = widget.getContext(); Intent intent = new Intent(context, ShowActivity.class); intent.putExtra("msg", url); context.startActivity(intent); } } }
2) 找出鏈接,綁定事件
contentText.setText(info.getContent()); contentText.setAutoLinkMask(Linkify.ALL); contentText.setMovementMethod(LinkMovementMethod.getInstance()); CharSequence text = contentText.getText(); if (text instanceof Spannable) { int end = text.length(); Spannable sp = (Spannable) contentText.getText(); URLSpan[] urls = sp.getSpans(0, end, URLSpan.class); SpannableStringBuilder style = new SpannableStringBuilder(text); style.clearSpans();// should clear old spans for (URLSpan url : urls) { BroadcastUrlSpan myURLSpan = new BroadcastUrlSpan(url.getURL()); style.setSpan(myURLSpan, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } contentText.setText(style); }
3) Listview onItemclick事件衝突問題
由於我的點擊處理是自己監聽的當前的itemView 並設置了onClick回調,所以沒有用到系統自帶的onItemClick回調,這應該也算是解決該衝突的辦法之一,需要注意的是:
我們如果 需要點擊textview 非鏈接部分也要有事件響應的話就需要爲其添加onClick事件,在我的例子裏是回掉了自己的onItemclick方法: