成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android的TextView文本:用SpannableString打造絢麗多彩的顯示效果

移動開發 Android
SpannableString其實和String一樣,都是一種字符串類型,同樣TextView也可以直接設置SpannableString作為顯示文本,不同的是SpannableString可以通過使用其方法setSpan方法實現字符串各種形式風格的顯示。

[[430202]]

前言

TextView是 Android 中最簡單、最常見的文字控件,幾乎每個頁面都有 TextView 的身影;

絕大多數情況我們用 TextView 只是單純地顯示一個文本;

但是簡單的 TextView 也能千變萬化顯示出各種效果,這一切都要歸功于 SpannableString;

今天我們就來講解;

一、SpannableString介紹

SpannableString其實和String一樣,都是一種字符串類型,同樣TextView也可以直接設置SpannableString作為顯示文本,不同的是SpannableString可以通過使用其方法setSpan方法實現字符串各種形式風格的顯示,重要的是可以指定設置的區間,也就是為字符串指定下標區間內的子字符串設置格式;

setSpan(Object what, int start, int end, int flags)方法需要用戶輸入四個參數,what表示設置的格式是什么,可以是前景色、背景色也可以是可點擊的文本等等,start表示需要設置格式的子字符串的起始下標,同理end表示終了下標,flags屬性就有意思了,共有四種屬性:

  • Spanned.SPAN_INCLUSIVE_EXCLUSIVE 從起始下標到終了下標,包括起始下標
  • Spanned.SPAN_INCLUSIVE_INCLUSIVE 從起始下標到終了下標,同時包括起始下標和終了下標
  • Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 從起始下標到終了下標,但都不包括起始下標和終了下標
  • Spanned.SPAN_EXCLUSIVE_INCLUSIVE 從起始下標到終了下標,包括終了下標

SpannableString可以實現的效果

  • BackgroundColorSpan 背景色;
  • ClickableSpan 文本可點擊,有點擊事件;
  • ForegroundColorSpan 文本顏色(前景色);
  • MaskFilterSpan 修飾效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter);
  • MetricAffectingSpan 父類,一般不用;
  • RasterizerSpan 光柵效果;
  • StrikethroughSpan 刪除線(中劃線);
  • SuggestionSpan 相當于占位符;
  • UnderlineSpan 下劃線;
  • AbsoluteSizeSpan 絕對大小(文本字體);
  • DynamicDrawableSpan 設置圖片,基于文本基線或底部對齊;
  • ImageSpan 圖片;
  • RelativeSizeSpan 相對大小(文本字體);
  • ReplacementSpan 父類,一般不用;
  • ScaleXSpan 基于x軸縮放;
  • StyleSpan 字體樣式:粗體、斜體等;
  • SubscriptSpan 下標(數學公式會用到);
  • SuperscriptSpan 上標(數學公式會用到);
  • TextAppearanceSpan 文本外貌(包括字體、大小、樣式和顏色);
  • TypefaceSpan 文本字體;
  • URLSpan 文本超鏈接;

二、效果實現

1、絕對大小

AbsoluteSizeSpan 就是構建絕對大小的類,它有兩個參數,第一個表示字體大小,第二個表示是否使用 DIP,false 的話單位就是 px,true 的話單位就是 dp;

  1. SpannableString ss = new SpannableString(txAbsoluteSize.getText()); 
  2. ss.setSpan(new AbsoluteSizeSpan(12, true), 2, 4, SPAN_EXCLUSIVE_EXCLUSIVE); 
  3. txAbsoluteSize.setText(ss); 

2、相對大小

相對字體大小就簡單一些了,只需要傳入一個字體相對大小,比如我們傳入了 1.5,中間兩個字就變成了原始字體的 1.5 倍大;

  1. SpannableString ss = new SpannableString(txRelativeSize.getText()); 
  2. ss.setSpan(new RelativeSizeSpan(1.5f), 2, 4, SPAN_EXCLUSIVE_EXCLUSIVE); 
  3. txRelativeSize.setText(ss); 

3、前景色

  1. SpannableString ss = new SpannableString(txForegroundColor.getText()); 
  2. ss.setSpan(new ForegroundColorSpan(Color.BLUE), 0, txForegroundColor.getText().length(), SPAN_EXCLUSIVE_EXCLUSIVE); 
  3. txForegroundColor.setText(ss); 

4、背景色

  1. SpannableString ss = new SpannableString(txBackgroundColor.getText()); 
  2. ss.setSpan(new BackgroundColorSpan(Color.LTGRAY), 0,  
  3.     txBackgroundColor.getText().length(), SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txBackgroundColor.setText(ss); 

5、加粗和傾斜

粗體、斜體、粗斜體對應的常量是:Typeface.BOLD、Typeface.ITALIC、Typeface.BOLD_ITALIC

  1. SpannableString ss = new SpannableString(txBord.getText()); 
  2. ss.setSpan(new StyleSpan(Typeface.BOLD), 0, txBord.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txBord.setText(ss); 

6、刪除線

刪除線用到的類是 StrikethroughSpan,沒有參數;

  1. SpannableString ss = new SpannableString(txDeleteLine.getText()); 
  2. ss.setSpan(new StrikethroughSpan(), 0, txDeleteLine.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txDeleteLine.setText(ss); 

7、點擊事件添加ClickableSpan的使用

  1. SpannableString spannableString = new SpannableString("要點擊的內容"); 
  2. spannableString.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.theme_default)), 0, 6, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);//修改字體顏色 
  3. ClickableSpan clickableSpan = new ClickableSpan() {//添加點擊 
  4.      @Override 
  5.      public void onClick(View widget) { 
  6.         onMyCommentClick(widget);//點擊事件 
  7.      } 
  8.      @Override 
  9.      public void updateDrawState(TextPaint ds) { 
  10.      //去除連接下劃線 
  11.         ds.setColor(ds.linkColor); 
  12.         ds.setUnderlineText(false); 
  13.       } 
  14. }; 
  15. spannableString.setSpan(clickableSpan, 0, 6, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); 
  16. txtView.setMovementMethod(LinkMovementMethod.getInstance());;//這句必須添加,否則點擊沒反應 
  17. txtView.setText(spannableString); 

8、下劃線

下劃線用到的類是 UnderlineSpan

  1. SpannableString ss = new SpannableString(txUnderLine.getText()); 
  2. ss.setSpan(new UnderlineSpan(), 0, txUnderLine.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txUnderLine.setText(ss); 

9、插入圖片或者表情

SpannableString 除了可以像前面那樣把文字變大變小變長變色,還可以把一部分文字變成圖片,承載圖片的是 Drawable 對象,而實現這個效果的就是 ImageSpan;

  1. SpannableString ss = new SpannableString(str); 
  2. ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM); 
  3. ss.setSpan(span, 0, str.length(), SPAN_EXCLUSIVE_EXCLUSIVE); 

10、文字的上標和下標

  1. SpannableString ss = new SpannableString(txSubSuperScript.getText()); 
  2. ss.setSpan(new SuperscriptSpan(), 2, 3, SPAN_EXCLUSIVE_EXCLUSIVE); 
  3. ss.setSpan(new SubscriptSpan(), 5, 6, SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txSubSuperScript.setText(ss); 

11、超鏈接形式

SpannableString 支持 6 中超鏈接形式,分別是:電話超鏈接、郵件超鏈接、網址超鏈接、短信超鏈接、彩信超鏈接、地圖超鏈接;

11.1.電話超鏈接

類:URLSpan,實際上6種超鏈接都是使用 URLSpan 構建的,只是構造函數傳入的鏈接格式不一樣, 電話超鏈接傳入的是 tel: 開頭,后面接要撥打的電話號碼,點擊后就會自動跳轉撥打電話;

  1. SpannableString ss = new SpannableString(txTelUrl.getText()); 
  2. ss.setSpan(new URLSpan("tel:02512345678"), 0, txTelUrl.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txTelUrl.setText(ss); 
  5. txTelUrl.setMovementMethod(LinkMovementMethod.getInstance()); 

11.2.郵件超鏈接

郵件超鏈接是以 mailto: 開頭,后面接郵箱地址。點擊后就會自動跳轉郵件 app;

  1. SpannableString ss = new SpannableString(txMailUrl.getText()); 
  2. ss.setSpan(new URLSpan("mailto:xxx@google.com"), 0, txMailUrl.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txMailUrl.setText(ss); 
  5. txMailUrl.setMovementMethod(LinkMovementMethod.getInstance()); 

11.3.網址超鏈接

網址超鏈接是以 http:// 或 https:// 開頭,后面接網址,點擊后跳轉瀏覽器 app,同樣如果有多個瀏覽器,需要作出選擇;

  1. SpannableString ss = new SpannableString(txWebUrl.getText()); 
  2. ss.setSpan(new URLSpan("http://www.baidu.com"), 0, txWebUrl.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txWebUrl.setText(ss); 
  5. txWebUrl.setMovementMethod(LinkMovementMethod.getInstance()); 

11.4.短信超鏈接

短信超鏈接是以 sms: 開頭,后面接手機號碼,點擊后跳轉系統短信 app;

  1. SpannableString ss = new SpannableString(txSmsUrl.getText()); 
  2. ss.setSpan(new URLSpan("sms:02512345678"), 0, txSmsUrl.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txSmsUrl.setText(ss); 
  5. txSmsUrl.setMovementMethod(LinkMovementMethod.getInstance()); 

11.5.彩信超鏈接

彩信超鏈接是以 mms: 開頭,后面接手機號碼,點擊跳轉系統短信app;

  1. SpannableString ss = new SpannableString(txMmsUrl.getText()); 
  2. ss.setSpan(new URLSpan("mms:02512345678"), 0, txMmsUrl.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txMmsUrl.setText(ss); 
  5. txMmsUrl.setMovementMethod(LinkMovementMethod.getInstance()); 

11.6.地圖超鏈接

地圖超鏈接以 geo: 開頭,后面接經緯度,點擊后跳轉地圖 app;

  1. SpannableString ss = new SpannableString(txGeoUrl.getText()); 
  2. ss.setSpan(new URLSpan("geo:30.123456,-50.024456"), 0,  
  3.     txGeoUrl.getText().length(), SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txGeoUrl.setText(ss); 
  5. txGeoUrl.setMovementMethod(LinkMovementMethod.getInstance()); 

12、添加項目符號

BulletSpan 類用于構建項目符號,第一個參數是項目符號所占的寬度,第二個參數是項目符號的顏色;

  1. SpannableString ss = new SpannableString(txBullte.getText()); 
  2. ss16.setSpan(new BulletSpan(20, Color.RED), 0, txBullte.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txBullte.setText(ss); 

13、文字的橫向和縱向拉伸

ScaleXSpan 類用于指定橫向拉伸的比例,我們傳 2.5 表示橫向拉伸為原來的 2.5 倍;

有了橫向拉伸,自然我們會想縱向拉伸,不好意思,不支持。因為縱向的高度就得用 textSize 設置;

  1. SpannableString ss = new SpannableString(txScaleX.getText()); 
  2. ss.setSpan(new ScaleXSpan(2.5f), 0, txScaleX.getText().length(),  
  3.     SPAN_EXCLUSIVE_EXCLUSIVE); 
  4. txScaleX.setText(ss); 

總結

EditText顯示表情包也是SpannableString,后面我們可以做個表情包自定義控件;

一起學習加油;

本文轉載自微信公眾號「Android開發編程」

 

責任編輯:姜華 來源: Android開發編程
相關推薦

2021-11-12 14:50:32

Kubectl命令Linux

2012-12-25 13:54:28

AndroidTextview

2018-04-12 11:33:18

5G

2021-06-10 07:49:28

Python詞云圖wordcloud

2010-02-05 16:28:07

Android

2011-08-09 18:06:20

windows7windowsXP

2013-10-31 13:30:36

設計專題

2010-03-03 16:08:20

Android手機系統

2011-09-09 16:43:32

Win7Win7主題

2011-09-09 14:49:31

Windows7開機動畫

2015-05-26 14:34:28

新絲綢之路戰略基地青海華為

2010-02-06 16:02:57

Android 應用程

2017-04-20 12:45:08

AndroidTextView

2012-05-25 15:48:59

HTML5

2015-06-08 15:32:31

ICT巡展蘭州華為

2009-07-10 13:20:37

Swing容器組件

2010-01-06 16:02:53

2010-02-04 14:27:11

2010-02-22 18:25:07

2010-03-04 10:34:04

Android操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 超碰av人人 | 精品久久99 | 午夜视频一区二区 | 欧美涩| 黄色一级毛片 | www国产成人免费观看视频 | 午夜精品久久久久久久久久久久久 | www.五月天婷婷.com | 视频1区2区| 久久蜜桃av一区二区天堂 | 亚洲综合中文字幕在线观看 | 日韩在线视频观看 | 中文在线www | 国产精品成人品 | av永久免费| 欧洲视频一区 | 操一草 | 久久精品色欧美aⅴ一区二区 | 久久久综合久久 | 亚洲电影一区二区三区 | 欧美成人精品一区 | 国产免费福利在线 | 国产精品成人69xxx免费视频 | 99re在线视频 | 久久天堂网 | 欧美精品在线免费观看 | 国产高清在线精品一区二区三区 | 日韩国产免费观看 | 久精品视频 | 亚洲一二三区在线观看 | 免费亚洲成人 | 日本视频在线 | 91精品国产自产在线老师啪 | 岛国在线免费观看 | 99色播| 欧美一卡二卡在线观看 | 精品一区二区三区不卡 | 五月天国产视频 | 婷婷激情五月网 | 国产精品久久久av | 国产一区二区三区在线视频 |