¿Cualquier diferencia de comportamiento de estos estados ligeramente diferentes estirables?

Q1) Mirando el estado de ListView original listSelector para listSelector tenemos algo como esto ( listSelector poco de código para simplificar el ejemplo):

 <selector> <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> <item android:drawable="<DRAWABLE_1>" android:state_focused="true" android:state_pressed="true"/> <item android:drawable="<DRAWABLE_1>" android:state_focused="false" android:state_pressed="true"/> <item android:drawable="<DRAWABLE_2>" android:state_focused="true"/> </selector> 

Pero lo he estado haciendo así en mi aplicación:

 <selector> <item android:drawable="<DRAWABLE_2>" android:state_pressed="false" android:state_focused="true"/> <item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/> <item android:drawable="<TRANSPARENT>" /> </selector> 

Lo que parece producir el mismo resultado y es mucho más simple. ¿Observa usted alguna situación en la que el primero funcionará mejor que mi propia versión? Sólo quiero asegurarme de que no me falte algo importante porque pefer para mantener mi código tan corto como sea posible …

Q2) Veo muchos estado drawables con <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> como el elemento superior, pero no puedo entender por qué es necesario. El state_window_focused siempre me confundió un poco … ¿Es realmente necesario?

Tuve que poner esto en una respuesta, aunque no estoy seguro de ello, pero eso es lo que pienso:

Comenzaré con Q2:

state_window_focused corresponde al comportamiento por defecto ("window" visible, pero unfocused) y creo que se utiliza sólo para señalar el valor predeterminado ( TRANSPARENT ).

Acerca de Q1:

DRAWABLE2 se visualizará en ambos casos y bajo las mismas condiciones – enfocado y no presionado, porque:

Primer caso:

 <item android:drawable="<DRAWABLE_2>" android:state_focused="true"/> 

Segundo caso:

 `<item android:drawable="<DRAWABLE_2>" android:state_focused="true" android:state_pressed="false"/>` 

Tenemos el D2 mientras enfocado, pero en su caso también mientras no está presionado.

DRAWABLE1 será visible sólo mientras se presiona en todos y cada uno de los casos. La diferencia es que en el primer caso, los dos estados adicionales se dan demasiado android:state_focused="true/false" , que no tiene ningún sentido, por lo que las dos líneas en el caso 1 se puede reducir a uno (exactamente el uno tienes):

 <item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/> 

Por lo tanto, para resumir las cosas:

Caso 1 – usted tiene:

 <selector> <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> <item android:drawable="<DRAWABLE_1>" android:state_focused="true" android:state_pressed="true"/> <item android:drawable="<DRAWABLE_1>" android:state_focused="false" android:state_pressed="true"/> <item android:drawable="<DRAWABLE_2>" android:state_focused="true"/> </selector> 

Que es equivalente a:

 <selector> <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> <item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/> <item android:drawable="<DRAWABLE_2>" android:state_focused="true"/> </selector> 

Y su caso (caso 2), para la comparación:

 <selector> <item android:drawable="<DRAWABLE_2>" android:state_pressed="false" android:state_focused="true"/> <item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/> <item android:drawable="<TRANSPARENT>" /> </selector> 

La única diferencia que puedo ver hasta ahora, es que en el primer caso, el DRAWABLE2 se mostrará sólo cuando se enfoca (no importa si está presionado o no), pero en su caso tiene que ser también presionado y esa es la única condición que es diferente.

  • Botón personalizado de Android; Cambiar el color del texto
  • Color de fondo de elemento de lista seleccionado inesperadamente reutilizado después de desplazamiento de lista en tabletas
  • Establecer el color específico de ColorStateList mediante programación
  • Android - State Selector Animaciones - Sólo animar de-prensa, NO presione
  • Android: ¿puede tener un efecto de rizado cuyo color de estado predeterminado es transparente?
  • Selección android selectableItemBackground
  • ? Android: attr / selectableItemBackground con otro fondo existente
  • Lengüetas estilo Android SlidingTabs con esquinas redondas
  • ¿Cómo tener un selector de dibujos vectoriales?
  • ListView selector de filas en el API nivel 10?
  • Cambiar un icono en una entrada de Android ListView cuando se presiona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.