2012-08-13 11 views
10

mam rozciągliwej takiego:Drawable.setState() Jak kontrolować specyficzny stan rozciągliwej?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_pressed" /> 

<item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_selected" /> 

<item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_selected" /> 

<item android:drawable="@drawable/seek_thumb_normal" /> 

w kodzie, w jaki sposób ustawić konkretny stan mojego rozciągliwej za? Chciałbym ustawić go na stan state_pressed = true.

Odpowiedz

19

Rozumiem. Komentarz pomógł tutaj: Android : How to update the selector(StateListDrawable) programmatically

Tak więc Drawable.setState() pobiera tablicę w liczbach całkowitych. Te liczby całkowite reprezentują stan losowania. Możesz przekazać dowolne int, które chcesz. Gdy ints przejdzie w dopasowaniu do "elementu" z listy elementów stanu, losowanie rysuje w tym stanie.

To ma większy sens w kodzie:

int[] state = new int[] {android.R.attr.state_window_focused, android.R.attr.state_focused}; 
minThumb.setState(state); 

Zauważ, że moja lista stan odkształcalne ma zarówno state_pressed="true" i android:state_window_focused="true". Więc muszę zdać obie te wartości int do setState. Kiedy chcę go usunąć, po prostu minThumb.setState(new int[]{});

+0

Co zrobić, jeśli bieżący widok nie ma tła i musi powiadomić dzieci o swoim stanie (ponieważ mają one android: duplicateParentState = "true")? jak zmieniłbyś stan widoku? –

+4

„To ma większy sens w kodzie” - nic związane z państw rozciągliwych sens ... – milosmns

4

Nie masz wystarczającej liczby punktów, aby komentować, więc jest to tylko dodatek do tego, co Android developer powiedział. Dla pewnych stanów, takich jak state_enabled nie ma oczywisty sposób, aby ustawić naprzeciwko wartość tego stanu (na przykład nie ma state_disabled). Aby wskazać stan ujemny lub przeciwny, wystarczy przekazać wartość ujemną zasobu dla tego stanu.

int[] state = new int[] {-android.R.attr.state_enabled}; //Essentially state_disabled 

Następnie przekaż tę tablicę całkowitą do metody setState() jak zwykle.

minThumb.setState(state); 
+0

Albo można po prostu pominąć ten stan z tablicy ... – vaughandroid

Powiązane problemy