GridView con selección múltiple no muestra el estado del elemento seleccionado (sólo estado presionado)
Tengo un GridView
que tiene un ChoiceMode de GridView.CHOICE_MODE_MULTIPLE_MODAL
. Me gustaría que la selección se comportara de manera similar a lo que se vería en la aplicación de la Galería (es decir, presionar largo sobre un elemento, el elemento seleccionado tiene un color de primer plano semitransparente para indicar que está seleccionado, presionar brevemente en otros elementos agrega o los elimina de la selección).
He creado un selector de estado así:
- Selección android selectableItemBackground
- Selector de lista de elementos GridView para varios elementos que no funcionan en Android
- set Selector for Button Programmatically issues
- Android - Eliminar Spinner Dropdown Arrow
- Confusión con el selector de "anchura más pequeña 600 dp"
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime"> <item android:drawable="@drawable/pressed_background" android:state_activated="true"/> <item android:drawable="@drawable/pressed_background" android:state_checked="true"/> <item android:drawable="@drawable/pressed_background" android:state_selected="true"/> <item android:drawable="@drawable/pressed_background" android:state_pressed="true"/> </selector>
Aquí está el archivo pressed_background.xml
:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/pressed" /> </shape>
Y el color al que se refiere:
<color name="pressed">#CC30d3dc</color>
Lo estoy aplicando a mi cuadrícula así:
<GridView android:id="@+id/grid" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/header" android:layout_marginTop="8dp" android:columnWidth="112dp" android:divider="@null" android:dividerHeight="0dp" android:drawSelectorOnTop="true" android:listSelector="@drawable/selectable_background" android:numColumns="auto_fit" android:stretchMode="columnWidth" />
Y aquí está el XML
para el elemento de la cuadrícula:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" > <ImageView android:id="@+id/photo" android:layout_width="@dimen/add_photos_image_size" android:layout_height="@dimen/add_photos_image_size" android:layout_centerInParent="true" /> </RelativeLayout>
El problema es que el estado seleccionado nunca aparece en el elemento de cuadrícula. Cuando empiezo a presionar mucho, el color del estado presionado aparece como se esperaba en la parte superior del elemento de la cuadrícula, pero tan pronto como se selecciona, el color desaparece y no hay indicación de que el elemento está en un estado seleccionado. La barra de acción contextual aparece como se esperaba. He intentado tantas variaciones diferentes del <selector>
y el fondo de elementos de la cuadrícula como pude pensar.
- Tema de un selector dibujable en pre-Lollipop
- Android drawSelectorOnTop con GridView
- Botón - Cambiar el color de fondo al hacer clic
- Botón de desactivación con selector de botones
- ¿Cualquier diferencia de comportamiento de estos estados ligeramente diferentes estirables?
- ¿Cómo tener un selector de dibujos vectoriales?
- ListView selector de filas en el API nivel 10?
- TabLayout seleccionado El icono Tab no está seleccionado al iniciar:
- OutOfMemoryException al pasar la imagen de la cámara a OpenCV
- Error en la validación de archivos XAPK – Archivos de expansión APK