2012-08-13 15 views
10

Tengo un dibujable así:Drawable.setState() ¿Cómo controlo el estado específico del drawable?

<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" /> 

En el código, cómo fijo estado específico de mi Disponibles? Me gustaría establecerlo en el estado state_pressed = true.

Respuesta

19

Lo tengo. Un comentario desde aquí ayudó: Android : How to update the selector(StateListDrawable) programmatically

Entonces Drawable.setState() toma una matriz en números enteros. Estos enteros representan el estado de los dibujables. Puedes pasar cualquier entrada que quieras. Una vez que los ints pasan a coincidir, un "elemento" de la lista de estados dibuja los sorteos dibujables en ese estado.

tiene más sentido en el código:

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

en cuenta que mi lista dibujable Estado tiene tanto la state_pressed="true" y android:state_window_focused="true". Así que tengo que pasar ambos valores int a setState. Cuando quiero borrarlo, acabo de minThumb.setState(new int[]{});

+0

¿Qué pasa si la vista actual no tiene un fondo, y la necesidad de notificar a sus hijos acerca de su estado (porque tienen android: duplicateParentState = "true")? ¿Cómo cambiarías el estado de la vista? –

+4

"Tiene más sentido en el código": nada relacionado con los estados dibujables tiene sentido ... – milosmns

4

No tengo suficientes puntos para comentar, por lo que esto es solo una adición a lo que dijo android-developer. Para ciertos estados como state_enabled, no hay una forma obvia de establecer el valor opuesto de ese estado (por ejemplo, no hay state_disabled). Para indicar un estado negativo u opuesto, simplemente pase el valor negativo del recurso para ese estado.

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

A continuación, pase ese conjunto de enteros al método setState() como de costumbre.

minThumb.setState(state); 
+0

O bien, podría omitir ese estado de la matriz ... – vaughandroid

Cuestiones relacionadas