Android中Selector的setSelected“方法不管用”


今天寫一個用兩個自定義的TextView控制ViewPager的時候,想實現點擊TextView處於選中狀態,

selector就選中<item>中的state_selected所對應的圖片。

selector中按往常的習慣這樣寫的

 

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/icon_selfinfo_pressed" android:state_selected="true"  />
    <item android:drawable="@drawable/icon_selfinfo_pressed" android:state_pressed="true" />
    <item android:drawable="@drawable/icon_selfinfo_normal" />

</selector>

但是我在使用的時候設置tv.setSelected(true)的時候,始終只是按下一個狀態,彈起恢復原來的狀態,達不到我想要的selected狀態。

 

分析了很多原因,有說按順序從上到下選匹配的:

During each state change, the state list is traversed top to bottom and the first item that matches the current state will be used—the selection is not


based on the "best match," but simply the first item that meets the minimum criteria of the state.

 

但是我做過測試,如上講selected狀態放到最上面,但是還是沒有setSeleted(true)的效果。估計還是匹配不了吧

估計在pressed和selected狀態時候,我們點擊匹配的都是pressed。

 

后面轉換了下思想,沒必要用state_pressed屬性,直接這樣寫達到了目的:

 

<item android:drawable="@drawable/icon_selfinfo_pressed" android:state_selected="true"  />
<item android:drawable="@drawable/icon_selfinfo_normal" android:state_selected="false" />
<item android:drawable="@drawable/icon_selfinfo_normal" />

 

 

 

而且state_pressed和state_selected一起使用本身就覺得很奇怪,

到底是要pressed的點擊一個狀態,彈起呈現另一個狀態,還是要selected的點擊就一直選中狀態?

歸根到底兩個一起使用不明確,我自己感覺意義也不大。

 

 

於是今天到此為止,總結下<selector>的用法就結束吧。

 

 

 

selector標簽,這個標簽是必要的標簽,而且應當作為XML文件的根節點,在selector可以有一或多個item子標簽
在selector標簽中,我們可以配置以下幾種屬性:
            xmlns:android="http://schemas.android.com/apk/res/android"    這個是android的命名空間,默認這么寫就可以
 
            android:constantSize     這個是 布爾型,false表示各個狀態的大小(size)各自不同,true表中所有的狀態大小相同(以最大的為准)。默認為false
 
       android:dither  布爾型。true表示,如果一個屏幕中位圖有這不同的像素配置,啟用位圖的抖動。false表示不啟用位圖的抖動。默認為true據度娘:dither,抖動,是一種故意造成的噪音用以隨機化量化誤差,阻止大幅度拉升圖像時導致的像banding(色帶)這樣的問題。
 
       android:variablePadding 布爾型。 選擇true時,drawable的內邊距會根據狀態的變化而變化,設置為true時,你必須為不同的狀態配置layout,但是通常不建議這么做。選擇false時,內邊距保持一致,所有狀態中最大的內邊距。默認為false
 
 
接下來是Item標簽
item標簽, 通過一些屬性的配置,定義drawable的特定狀態。該標簽必須作為selector的子標簽。
在item標簽中,我們可以配置一下幾種屬性
 

android:drawable

這個屬性是必須的,為當前控件指定資源。

android:state_pressed

布爾值。true指當用戶點擊或者觸摸該控件的狀態。默認為false

android:state_focused

布爾值。ture指當前控件獲得焦點時的狀態。默認為false

android:state_hovered

布爾值。true表示光標移動到當前控件上的狀態。默認為false

android:state_selected

布爾值。true表示被選擇的狀態,例如在一個下拉列表中用方向鍵下選擇其中一個選項。

這個和focus的區別,selectedfocus不充分的情況。比如一個listview獲得焦點(focus),而用方向鍵選擇了其中的一個itemselected

android:state_checkable

布爾值。ture表示可以被勾選的狀態。這個僅在當控件具有被勾選和不被勾選的狀態間轉換時才起作用。 

android:state_checked

布爾值。true表示當前控件處於被勾選(check的狀態) 

android:state_enabled

布爾值。true表示當前控件出於可用的狀態。比如可以被點擊 

android:state_activated

布爾值。true表示當前控件被激活的狀態。

android:state_window_focused

布爾值。true表示當前控件出於最前端時,應用窗口獲得焦點的狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM