Textview 鏈接處理

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方法:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章