2012-01-13 19 views
23

Me gustaría que un fondo de botón permanezca en cierto color después de hacer clic en el botón, y cambiar los colores nuevamente cuando se presiona otro botón. Pensé que este era el estado "state_focused".¿Cuál es el estado "state_focused" de un botón?

Pero los dos únicos estados que parece tener para mi botón se presionan o no se presionan.

¿Entiendo correctamente el estado state_focused o mi StateListDrawable (vea a continuación) es incorrecta?

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_focused="true" android:state_pressed="false"><shape> 
      <solid android:color="#00ff00" /> 
     </shape></item> 
    <item android:state_pressed="true"><shape> 
      <solid android:color="#ff0000" /> 
     </shape></item> 
    <item><shape> 
      <solid android:color="#0000ff" /> 
     </shape></item> 

</selector> 

Respuesta

37

state_focused es cada vez que el botón se centra en el uso de un dpad o la rueda de desplazamiento. Las vistas generalmente no muestran un estado enfocado al usar el tacto.

+0

Gracias dmon. ¿Ves de todos modos para usar un StateListDrawable para lograr lo que quiero para un botón? – aez

+3

Creo que puede usar "focusableInTouchMode", pero la guía del desarrollador sugiere que no: "Fousable en modo táctil (vea View.setFocusableInTouchMode) es una propiedad que puede establecer usted mismo, ya sea desde código o desde XML. Sin embargo, debe usar es escasa y solo en situaciones muy específicas, ya que rompe la coherencia con el comportamiento normal de la interfaz de usuario de Android. "Ver http://developer.android.com/resources/articles/touch-mode.html. – dmon

+1

No puedo evitar sentir que esto no responde la pregunta real. –

14

https://developer.android.com/guide/topics/resources/drawable-resource.html

android:state_pressed
de Boole. "verdadero" si este elemento se debe usar cuando se presiona el objeto (como cuando se toca/presiona un botón); "falso" si este elemento se debe usar en el estado predeterminado, sin presionar.

android:state_focused
de Boole. "verdadero" si este elemento se debe usar cuando el objeto tiene un foco de entrada (como cuando el usuario selecciona una entrada de texto); "falso" si este elemento se debe usar en el estado predeterminado no enfocado.

android:state_hovered
de Boole. "verdadero" si este elemento se debe usar cuando el objeto está siendo desplazado por un cursor; "falso" si este elemento se debe usar en el estado predeterminado, sin interrupción. A menudo, este dibujante puede ser el mismo dibujable utilizado para el estado "enfocado".
introdujo en el nivel API 14.

android:state_selected
Boolean. "verdadero" si este elemento se debe usar cuando el objeto es la selección del usuario actual cuando se navega con un control direccional (como cuando se navega por una lista con un d-pad); "falso" si este elemento se debe usar cuando el objeto no está seleccionado.
El estado seleccionado se usa cuando el enfoque (android: state_focused) no es suficiente (como cuando la vista de lista tiene un foco y un elemento dentro de ella se selecciona con un d-pad).

android:state_checkable
de Boole. "verdadero" si este elemento se debe usar cuando el objeto es seleccionable; "falso" si este elemento se debe usar cuando el objeto no se puede marcar. (Sólo es útil si el objeto puede hacer la transición entre un widget checkable y no comprobable.)

android:state_checked
Boolean. "verdadero" si este elemento se debe usar cuando se marca el objeto; "falso" si se debe usar cuando el objeto no está marcado.

android:state_enabled
de Boole. "verdadero" si este elemento se debe usar cuando el objeto está habilitado (capaz de recibir eventos de toque/clic); "falso" si debe usarse cuando el objeto está deshabilitado.

android:state_activated
de Boole. "verdadero" si este elemento se debe usar cuando el objeto se activa como la selección persistente (como para "resaltar" el elemento de la lista previamente seleccionado en una vista de navegación persistente); "falso" si debe usarse cuando el objeto no está activado.
introdujo en el nivel API 11.

android:state_window_focused
Boolean. "verdadero" si este elemento se debe usar cuando la ventana de la aplicación tiene foco (la aplicación está en primer plano), "falso" si este elemento se debe usar cuando la ventana de la aplicación no tiene foco (por ejemplo, si el tono de notificación es tirado hacia abajo o aparece un cuadro de diálogo).

+0

Le agradecemos a Bourbon, pero ¿tiene alguna guía sobre cómo se puede obtener un Botón para que siga siendo de cierto color después de presionarlo y hasta que se presione otro Botón usando un StateListDrawable? – aez

+0

¿Ha intentado hacer un setPressed (verdadero) en el método onClick? – Bourbon

+0

No he probado ese método en particular, pero hay muchas formas de hacerlo en el código (y lo tengo trabajando en tiempo de ejecución), simplemente pensé que sería mucho más limpio si pudiera hacerlo en un XML StateListDrawable thingy. – aez

Cuestiones relacionadas