<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
BulletSpan
為段落開頭增加專案符號並支援大小、顏色、弧度
span.append(SpannableString("BulletSpan").also { it.setSpan(BulletSpan(40, Color.RED), 0, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) })
QuoteSpan
為段落開頭增加垂直參照線
span.append(SpannableString("nQuoteSpan").also { it.setSpan(QuoteSpan(Color.BLUE), 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) })
AlignmentSpan
影響段落對齊方式,支援三種模式:常規、居中、反方向對齊
span.append(SpannableString("nAlignmentSpan ALIGN_CENTER").also { it.setSpan( AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), 0, "AlignmentSpan ALIGN_CENTER".length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) })
UnderlineSpan
為文欄位落增加下劃線
span.append(SpannableString("nUnderlineSpan").also { it.setSpan( UnderlineSpan(), 0, "UnderlineSpan".length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) })
StrikethroughSpan
為文欄位落增加刪除線
span.append(SpannableString("nStrikethroughSpan").also { it.setSpan( StrikethroughSpan(), 0, "StrikethroughSpan".length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) })
SubscriptSpan
為文欄位落實現下標字元效果,縮小文字大小。
span.append(SpannableString("n123SubscriptSpan456").also { it.setSpan( SubscriptSpan(), 3, "SubscriptSpan".length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) })
SuperscripSpan
為文欄位落實現上標字元效果,縮小文字大小。
span.append(SpannableString("n123SuperscriptSpan456").also { it.setSpan( SuperscriptSpan(), 3, "SuperscriptSpan".length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) })
TextApperanceSpan
根據組態檔資訊為文字新增樣式,可塑性更方便易用和複寫。
span.append(SpannableString("nTextAppearanceSpan").also { it.setSpan( TextAppearanceSpan(this@FuncSpannableAc,R.style.specialTextAppearance), 0, "TextAppearanceSpan".length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) })
結合xml檔案樣式設定使用
<style name="specialTextAppearance" parent="@android:style/TextAppearance"> <item name="android:textColor">@android:color/holo_red_dark</item> <item name="android:textColorHighlight">@android:color/holo_blue_bright</item> <item name="android:textColorHint">@color/purple_700</item> <item name="android:textColorLink">@color/purple_200</item> <item name="android:textSize">20sp</item> <item name="android:textStyle">italic</item> </style>
BackgroundColorSpan
為文欄位落增加背景色效果。
span.setSpan(BackgroundColorSpan(Color.BLUE), 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
ForegroundColorSpan
修改文字顏色,主要是因為在一個段落中可能需要修改某幾個字元顏色。
span.setSpan(ForegroundColorSpan(Color.RED), 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
TextClickableSpan
為文欄位落增加可點選,可以理解為自定義的URLSpan。因此點選事件需要開發者自定義繼承實現ClickableSpan
。
span.setSpan(TextClickableSpan(), 10, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) class TextClickableSpan : ClickableSpan() { override fun onClick(widget: View) { Toast.makeText(widget.context, "TextClickSpan", Toast.LENGTH_SHORT).show() } }
URLSpan
為文欄位落增加超連結點選功能,可跳轉到網頁(外接瀏覽器形式)。
另外一個小TipssetSpan
是可以在同一下標設定多重樣式效果。例如URLSpan
和ForegroundColorSpan
可重疊使用,原URLSpan
超連結的文字顏色需要替換結合ForegroundColorSpan
就能實現。
span.setSpan( URLSpan("https://www.baidu.com"), 20, 23, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) // 嘗試超連結是否可以修改顏色(結果是可以說明和上述BackgroundColorSpan和ForegroundColorSpan一樣) span.setSpan(ForegroundColorSpan(Color.RED), 20, 23, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
StyleSpan
修改文欄位落樣式,可設定樣式較為有限。一般還是推薦使用TextApperanceSpan可設定項更多
span.setSpan(StyleSpan(Typeface.BOLD), 38, 47, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
ImageSpan
支援在段落中插入圖片資源,支援型別包括可以是Bitmap
圖片資源、ResourceId
資原始檔又或者是本地檔案Uri
資源。
span.setSpan( ImageSpan(this, R.mipmap.ic_launcher, DynamicDrawableSpan.ALIGN_BASELINE), 47, 48, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE )
對於長文字內容需要設定多種樣式時儘量使用SpannableStringBuilder
方便定位每個新增setSpan的下標而不需要使用SpannableString
來計算定位每個位置來確認樣式(容易出錯)可以避免需要不必要麻煩和錯誤。
var spannableString = SpannableString("ColorSpan ClickSpan URL UnderlineSpan StyleSpan ") spannableString.also { span -> span.setSpan(BackgroundColorSpan(Color.BLUE), 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) span.setSpan(ForegroundColorSpan(Color.RED), 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) ...... }
var spannableString2 = SpannableStringBuilder("") spannableString2.also { span -> span.append(SpannableString("BulletSpan").also { it.setSpan(BulletSpan(40, Color.RED), 0, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) }) span.append(SpannableString("nQuoteSpan").also { it.setSpan(QuoteSpan(Color.BLUE), 0, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) }) }
兩者程式碼一對比就能知道採用SpannableStringBuilder
形式程式碼結構和可讀性以及出現樣式定位錯誤的情況會小很多。
如圖所示過去對於這種樣式開發者或許會選擇使用兩個TextView
來實現,前面為固定文字後面是引數內容。在瞭解如何使用Span為TextView增加樣式只需一個TextView
就能實現,同時也減輕一些業務開發量(當引數為空時整個view不展示、view佈局關係依賴和層級更簡單等)
var spannableString3 = SpannableStringBuilder("") spannableString3.also { span -> span.append(SpannableString("人均費用:").also { it.setSpan(StyleSpan(Typeface.BOLD), 0, "人均費用".length + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) }) span.append(SpannableString("99元/人")) }
學會使用Span
對於文字樣式開發會有所幫助,能夠快速開發易用方便的文字樣式效果。但對於其他一些效果或許無法達成例如形狀樣式結合文字共用同一個TextView
開發會存在困難。
到此這篇關於Android學習之Span的使用方法詳解的文章就介紹到這了,更多相關Android Span使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45