Button中setSpan無效
Button是最常用的基本控件之一抚笔,它只是簡單繼承于TextView
素征,所有邏輯均在父類中實現(xiàn)。本文旨在就日常使用Button
過程中遇到的系列問題進行記錄,并將不斷更新钞馁。
TextView
有個屬性android:textAllCaps
阐滩,該屬性用于將設(shè)置的源文本轉(zhuǎn)換為大寫字符串春霍。比如textView.setText("AbcdEfg");
同時android:textAllCaps = true
或者textView.setAllCaps(true);
,那么實際顯示的內(nèi)容為ABCDEFG
叶眉,全都被轉(zhuǎn)換為了大寫址儒!
Transforms source text into an ALL CAPS string, locale-aware.
但該屬性生效時,如果setText
方法設(shè)置的文本中因為setSpan
或者Html.fromHtml
等原因包含有Spannable
內(nèi)容衅疙,會導(dǎo)致Spannable
內(nèi)容得不到正確的顯示莲趣,即無效。Button
默認(rèn)情況下該屬性為true
饱溢,TextView
默認(rèn)情況下為false
喧伞。在上述情況下,為了Spannable
內(nèi)容能正確解析和顯示绩郎,需要顯示的設(shè)置Button
的android:textAllCaps
為false
潘鲫,代碼或者xml方式均可;或者使用TextView
肋杖。
View的scrollX溉仑、scrollY屬性
scrollX和scrollY是每個view都具有的屬性,分別表示該view在水平和垂直方向上相對于坐標(biāo)原點滾動的距離状植,可正可負(fù)浊竟。通過調(diào)用scrollTo(int x, int y)
或者scrollBy(int dx, int dy)
方法可以修改對應(yīng)的scrollX和scrollY值。注意津畸,當(dāng)view的scroll屬性改變的時候振定,view的位置并沒有改變(不會改變view相對于父viewgroup的布局),即mLeft(子view的最左邊界到父view的距離)肉拓、mRight后频、mTop、mBottom屬性不變暖途,變化的僅僅是view的內(nèi)容卑惜。
當(dāng)在一個view上運用scrollX和scrollY屬性時,在view進行繪制的時候丧肴,會首先對當(dāng)前的canvas進行一個translate變換残揉,然后開始繪制view的內(nèi)容,最后將canvas恢復(fù)到transalte之前的狀態(tài)芋浮。具體的變換為:
canvas.translate(-mScrollX, -mScrollY);
在當(dāng)前需要繪制的canvas對象上進行上面的變換抱环,注意兩個scroll值都是取反的壳快。相當(dāng)于將canvas的原點移動到對應(yīng)的的(-mScrollX, mScrollY)位置處然后開始view的繪制。假設(shè)mScrollX值為負(fù)數(shù)镇草,則canvas的原點x坐標(biāo)會向右移動眶痰,所以會導(dǎo)致view的內(nèi)容整體往x軸正方向移動,即內(nèi)容向正方向移動梯啤,所以sroll值的正負(fù)情況跟view內(nèi)容移動方向相反
竖伯。