Spannale的flags的真正含義,有圖有真相

當你第一眼看到Spannable標誌的EXCLUSIVEINCLUSIVE時,我以爲他們只是代表着各種樣式span是否包含SpannableString中指定的開始和結束的索引位置,但事實證明這種想法是錯誤的,我們可以用下面的例子證明它

val myString = "01234"
val start = 1
val end = 3
val spanFlag = Spannable.SPAN_EXCLUSIVE_INCLUSIVE
val spannableString = SpannableString(myString)
val colorSpan = ForegroundColorSpan(Color.RED)
spannableString.setSpan(colorSpan, start, end, spanFlag)
textView.text = spannableString

下面是結果,經過驗證,不過是哪種Flag,始終都是包括開始索引不包括結束索引
Spannable.SPAN_INCLUSIVE_INCLUSIVE
在這裏插入圖片描述
Spannable.SPAN_INCLUSIVE_EXCLUSIVE
在這裏插入圖片描述
Spannable.SPAN_EXCLUSIVE_INCLUSIVE
在這裏插入圖片描述
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
在這裏插入圖片描述


那這些flags究竟是什麼意思呢

Spannable標誌的INCLUSIVEEXCLUSIVE實際上是說明樣式span是否能夠影響在開始位置和結束位置插入的文本,下面用修改過的demo證明它

val myString = "01234"
val start = 1
val end = 3
val spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE
val spannableString = SpannableStringBuilder(myString)
val colorSpan = ForegroundColorSpan(Color.RED)
spannableString.setSpan(colorSpan, start, end, spanFlag)
spannableString.insert(end,"zz")
spannableString.insert(start,"xx")
textView.text = spannableString

Spannable.SPAN_INCLUSIVE_INCLUSIVE
在這裏插入圖片描述
Spannable.SPAN_INCLUSIVE_EXCLUSIVE
在這裏插入圖片描述
Spannable.SPAN_EXCLUSIVE_INCLUSIVE
在這裏插入圖片描述
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
在這裏插入圖片描述
在第二個例子裏使用了SpannableStringBuilder,這是因爲SpannableString所代表的文本是不可改變的,所以不能插入字符串

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章