日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android花样Text设置神器之SpanableString

發布時間:2023/12/16 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android花样Text设置神器之SpanableString 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?TextView在Android中幾乎是再常見不過的控件了,幾乎遍布在各個角落里,對TextView并沒有什么技術點來做分析,但是有時候可能會需要你在項目中處理一些特殊字體,比如下劃線,橫穿線,亦或者是為TextView部分字體設置點擊或者顏色背景等等,這點需求雖然不是什么難事,但是選不好解決方法真的會可能會讓你折騰好久。說了這么多無非就是開篇引個題,下面為大家介紹SpanableString哈。

里面需要具體分析的技術點并不是太多,我先給大家貼上源碼,看看google是怎么定義這么一個東東的。

/*** This is the class for text whose content is immutable but to which* markup objects can be attached and detached.* For mutable text, see {@link SpannableStringBuilder}.*/

?

上面這段內容摘自安卓SpanableString源碼里面的注釋,大體意思就是說

這是一個內容和標記都可以更改的文本類

其實源碼內容并不是太多,感興趣的話可以去查看下源碼

源碼關鍵的兩個方法

public void setSpan(Object what, int start, int end, int flags) {}public void removeSpan(Object what) {}

我先帶大家簡單使用下這個控件,然后在來分析,其實說到這里有一個小細節開篇的時候忘記跟大家提起了,就是看到SpanableString,其實還有SpanableStringBuilder,其用法類似,大家可以類比String跟StringBuilder來區別,我在此不多解釋了,就像你會有String肯定也會使用StringBuilder,我就不在做重復的解釋了,下面先來具體舉個例子帶大家認識下這個東東。

?

SpannableString spannableString = new SpannableString("轉點軟件技術工作室技術分享專題");ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#009ad6"));spannableString.setSpan(colorSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.mode1)).setText(spannableString);

?

通過上述代碼就可以實現開篇提到的給部分字體設置顏色的效果,那趁著大家現在對SpanableString有個大概的認識之后我先簡單分析下流程,然后再把其他使用方法給大家總結下。

?

我個人是吧SpanableString理解成一個特殊的字符串,不同于String的是他可以在上面做出一些花哨的東西,示例代碼中分四步完成了這一操作。

1.先是new出一個SpanableString對象,并為其初始化一個字符串,

2.然后通過span的方式生成一個colorSpan對象,這里的span可以設置成其他任何你想設置的形式,比如開篇提到的下劃線或者上劃線,點擊事件都可以,對應于不同的span對象,稍后我整理給大家。

3.為SpanableString設置span。setSpan的四個參數稍后我結合源碼分析給大家。

4.為textView設置特殊樣式的字體。

?

具體分析:

從上面的步驟中大家也看出了,其實設置特殊樣式的關鍵步驟在第2步,下面我先為大家整理里具體都可以設置那些特殊樣式:

常用到的Span大致如下

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

其用法大家可以套用示例代碼中的樣子,無非是具體的Span類型不同,用法一致。

?

現在我解釋剛剛在第三步中說到的setSpan的用法,以及4個參數具體代表的含義,先給大家貼上setSpan的源碼。

public void setSpan(Object what, int start, int end, int flags) {super.setSpan(what, start, end, flags);}


上述源碼是我直接從SpanableString類中摘取出來的,

第一個參數 ?Object what:這個what就是上面分享的各種Span的類型,大家根據需要自己指定。

第二個第三個參數 int start int end:這兩個參數是Span開始跟結束的位置。

第四個參數: int flag 參數用4中類型,分別代表的意思為span開始結束的位置包含或者不包含start 、end,

flags的取值如下:

Spannable. SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括,即在文本前插入新的文本會應用該樣式,而在文本后插入新文本不會應用該樣式

Spannable. SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括,即在文本前插入新的文本會應用該樣式,而在文本后插入新文本也會應用該樣式

Spannable. SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,后面不包括

Spannable. SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括


好了,看到這里我想你應該已經掌握了具體怎么設置特殊并且花哨的textview了,其他各種Span的設置,代碼大同小異我就不重復貼代碼帶大家演示了,有一個小細節需要大家注意下,我貼上代碼算是提醒下大家吧,在設置ClickableSpan的時候千萬別忘了setMovementMethod。示例代碼如下:

SpannableString spannableString = new SpannableString("轉點軟件技術工作室技術分享");ClickableSpan clickableSpan = new ClickableSpan() {@Overridepublic void onClick(View widget) {//TODO 點擊事件在此處理System.out.println("轉點軟件被點擊了.....");}};spannableString.setSpan(clickableSpan,0,3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);textView.setText(spannableString);textView.setMovementMethod(LinkMovementMethod.getInstance()); //為TextView設置完Span后,別忘了setMovementMethod

?

上述過程,如有分析不到位的地方,還請各位看官批評扶正。

?

?

?

?

總結

以上是生活随笔為你收集整理的Android花样Text设置神器之SpanableString的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。