国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

TextView中URL等指定特殊字符串與點擊事件解析

2019-10-22 18:22:45
字體:
供稿:網(wǎng)友

使用TextView時,有時可能需要給予TextView里的特定字符串,比如URL,數(shù)字特別的樣式,必希望能夠添加點擊事件。比如發(fā)短信時,文字里的url就可以點擊直接打開瀏覽器,數(shù)字可以點擊撥打電話。

Android提供了SpannableString類來對TextView的內(nèi)容進行處理,具體步驟: 

1.new一個SpannableString對象,傳入需要顯示在TextView上的內(nèi)容; 

2.對內(nèi)容進行處理(比如用正則表達式解析出URL或數(shù)字等等,并指定樣式),這部分的核心就是調(diào)用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的指定內(nèi)容就已經(jīng)實現(xiàn)指定樣式了。,但是如果想要添加點擊事件,還需要讓TextView調(diào)用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ù)字,并調(diào)用setSpan一一傳入相應(yīng)start和end。

最后,要說下setSpan的最后一個參數(shù)flags:

Spanned.SPAN_INCLUSIVE_EXCLUSIVE 是當前這個設(shè)置包括前面,不包括后面

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 當前設(shè)置前后不包括

Spanned.SPAN_INCLUSIVE _INCLUSIVE 當前設(shè)置包括前面,包括后面

Spanned.SPAN_EXCLUSIVE_INCLUSIVE 當前設(shè)置不包括前面,包括后面

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 古蔺县| 贡嘎县| 安阳市| 苏尼特右旗| 秦皇岛市| 定南县| 武邑县| 全州县| 青浦区| 桃江县| 尉犁县| 饶河县| 云安县| 辽中县| 电白县| 贡山| 利辛县| 塔城市| 林周县| 屏东县| 墨脱县| 景泰县| 扎鲁特旗| 板桥市| 腾冲县| 鹤岗市| 英德市| 浮梁县| 华池县| 城步| 扶余县| 南靖县| 黄梅县| 措美县| 定结县| 仁化县| 宜丰县| 麻江县| 即墨市| 余庆县| 兴安盟|