TextView中URL等指定特殊字符串與點擊事件解析
使用TextView時,有時可能需要給予TextView里的特定字符串,比如URL,數(shù)字特別的樣式,必希望能夠添加點擊事件。比如發(fā)短信時,文字里的url就可以點擊直接打開瀏覽器,數(shù)字可以點擊撥打電話。
Android提供了SpannableString類來對TextView的內容進行處理,具體步驟:
1.new一個SpannableString對象,傳入需要顯示在TextView上的內容;
2.對內容進行處理(比如用正則表達式解析出URL或數(shù)字等等,并指定樣式),這部分的核心就是調用SpannableString對象的setSpan()方法;
public void setSpan(Object what, int start, int end, int flags);
可以看到有四個參數(shù),start 和 end 是意味著你要改變的是該字符串下標start到end的部分,what可以傳入對start到end的文本的處理方式或者樣式,也可以傳入你指定的東西來取代文本,比如圖片。flags總共有四種,他意味著是否影響指定處前一個或后一個字符串
3.TextView.setText(spannableString),由于SpannableString實現(xiàn)了CharSequence,所以TextView可以直接set。
注意:到這里TextView的指定內容就已經(jīng)實現(xiàn)指定樣式了。,但是如果想要添加點擊事件,還需要讓TextView調用setMovementMethod(MovementMethod movement)來實現(xiàn)點擊事件。
下面貼出我的Demo,實現(xiàn)將TextView里的數(shù)字標注出來,點擊數(shù)字將彈出Toast將數(shù)字顯示出來。
private void init() { tvMain.setMovementMethod(LinkMovementMethod.getInstance()); SpannableString s = new SpannableString(CONTENT); filterNumber(s); tvMain.setText(s); } private static final String REG = "\\d+"; public class TextClickableSpan extends ClickableSpan { private String text; public TextClickableSpan(String text) { this.text = text; } @Override public void onClick(View view) { Toast.makeText(MyActivity.this,text,Toast.LENGTH_SHORT).show(); } } private void filterNumber(Spannable s) { Matcher m = Pattern.compile(REG).matcher(s.toString()); while (m.find()) { String text = m.group(); TextClickableSpan span = new TextClickableSpan(text); s.setSpan(span,m.start(),m.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } }
代碼很簡單,首先要說的是ClickableSpan,因為當你點擊該特定字符串時,LinkMovementMethod的onTouchEvent()方法,將會根據(jù)你點擊的位置獲得ClickableSpan對象,并執(zhí)行該對象的onClick方法。而這個ClickableSpan需要在setSpan時傳入(這個地方不僅可以傳入ClickableSpan還有諸如ImageSpan等等,不過如果要可以點擊的話,要傳入ClickableSpan。其他的這里不一一贅述)。
然后我的filterNumber方法,就是利用正則表達式來過濾數(shù)字,并調用setSpan一一傳入相應start和end。
最后,要說下setSpan的最后一個參數(shù)flags:
Spanned.SPAN_INCLUSIVE_EXCLUSIVE 是當前這個設置包括前面,不包括后面
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 當前設置前后不包括
Spanned.SPAN_INCLUSIVE _INCLUSIVE 當前設置包括前面,包括后面
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 當前設置不包括前面,包括后面
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android開發(fā)之搜索框SearchView用法示例
這篇文章主要介紹了Android開發(fā)之搜索框SearchView用法,結合實例形式分析了Android搜索框SearchView的基本功能、用法及相關操作注意事項,需要的朋友可以參考下2019-03-03Android 通過代碼設置、打開wifi熱點及熱點連接的實現(xiàn)代碼
這篇文章主要介紹了Android 通過代碼設置、打開wifi熱點及熱點連接的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2018-05-05Android創(chuàng)建一個Activity的方法分析
這篇文章主要介紹了Android創(chuàng)建一個Activity的方法,結合實例形式分析了Android創(chuàng)建Activity的具體步驟與相關實現(xiàn)技巧,需要的朋友可以參考下2016-04-04Android開發(fā)之文本內容自動朗讀功能實現(xiàn)方法
這篇文章主要介紹了Android開發(fā)之文本內容自動朗讀功能實現(xiàn)方法,結合實例形式分析了Android自動朗讀TTS功能的操作步驟、相關函數(shù)使用方法與注意事項,需要的朋友可以參考下2017-09-09