¿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:
- XML selector de fondo no funciona en 2.3
- Androide ColorStateList creado mediante programación y aplicado a TextColor
- Android drawSelectorOnTop con GridView
- Agregar color "# e3bb87" a StateListDrawable mediante programación
- Android - Eliminar Spinner Dropdown Arrow
<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?
- ¿Cómo implementar un CustomView con estados selectores personalizados?
- set Selector for Button Programmatically issues
- Norma de arquitectura de Android MVP para cargar interfaz de usuario con clase Model que tiene recurso android
- Los elementos ListView no se muestran como activados
- ¿Cómo restringir a un usuario que elija sólo imágenes JPG de la galería?
- Selector de lista de elementos GridView para varios elementos que no funcionan en Android
- Cómo establecer ListView no se puede hacer clic
- 9-Patch en Selector muestra puntos negros
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.