1. 程式人生 > >Android實現TextView中部分文字監聽事件

Android實現TextView中部分文字監聽事件

    通常我們只需要用TextView來顯示文字資訊,展示給使用者看,而把點選相應的監聽事件交給Button等控制元件來處理,當然TextView也可以實現點選事件。有時候我們要對TextView中的部分文字進行點選,我們應該如何操作呢?一般有以下三種方式:

1,在佈局檔案中設定TextView的android:autoLink屬性,比如設定android:autoLink=“phone”,則可以點選手機號碼直接撥打電話。android:autoLink設定是否當文字為URL連結/email/電話號碼/map時,文字顯示為可點選的連結。可選值(none/web/email/phone/map/all) 等。這個最簡單,但實現的目標也比較單一,比如只可以打電話或發郵件等。

2,用Html格式中的href鏈,比如:

String content= "<font color=#ff0000> 點選對應文字可以跳轉網頁面" + "</font><a href='http://www.baidu.com'>百度</a>" ;  TextView linkTextView= (TextView) findViewById(R.id.linkTextView);  textView.setText(Html.fromHtml(content)); 

 點選上面的百度二字就可以直接 跳轉到百度網頁。這種方式一般只能跳轉到網頁面面。

3,當我們想實現點選部分文字跳轉到指定的頁面或是實現特定的效果(比如彈出提示對話方塊,Toast資訊等)我們可以使用SpannableString來實現:

       TextView textView=(TextView)findViewById(R.id.tv);

SpannableString spanStr = new SpannableString(textView.getText().toString()); NoUnderlineSpan mNoUnderlineSpan = new NoUnderlineSpan();//這句話的目的是去除特殊文字下劃線效果 spanStr.setSpan(new ForegroundColorSpan(Color.parseColor("#00b5f0")), s.length() - 7, s.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//設定部分文字文字顏色,這裡的文字長度肯定大於7才行
s.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { //這裡就是點選事件,實現自己想要的效果 } }, spanStr.length() - 7, s.length(), Spanned.SPAN_MARK_MARK); spanStr.setSpan(mNoUnderlineSpan, spanStr.length() - 7, spanStr.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); textView.setText(spanStr); textView.setMovementMethod(LinkMovementMethod.getInstance());

實現清除文字下劃線:

public class NoUnderlineSpan extends UnderlineSpan { @Override public void updateDrawState(TextPaint ds) { ds.setColor(ds.linkColor); ds.setUnderlineText(false); } }

當然還有其它的方法啦!