Tengo un ListView y sus elementos tienen una flecha alineada al final, así:

enter image description here

La flecha se coloca en el fondo, que es un elemento de diseño personalizado:

background_listitem.xml

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

    <item>
        <shape>
            <solid android:color="@android:color/white" />
        </shape>
    </item>

    <item
        android:width="24dp"
        android:height="24dp"
        android:gravity="right|end|center_vertical"
        android:right="@dimen/preferred_margin">
        <bitmap android:src="@drawable/ic_chevron_right_black_24dp" />
    </item>

</layer-list>

Con API> 22 esto funciona muy bien, pero 22 y debajo del fondo se ve así:

enter image description here

Así es como estoy configurando el fondo:

listitem_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/listitem_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background_listitem"
    android:foreground="?attr/selectableItemBackgroundBorderless"
    android:padding="@dimen/preferred_margin">

    ...

</RelativeLayout>

¿Hay alguna forma de solucionar este problema sin agregar la flecha como ImageView?

1
josemigallas 26 ago. 2016 a las 11:29

2 respuestas

La mejor respuesta

Puede cambiar el archivo item.xml de la lista de antecedentes como este, espero que esto le ayude.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/white"/>

    <item>
        <bitmap android:src="@drawable/ic_chevron_right_black_24dp"
            android:gravity="right|end|center_vertical" />
    </item>

</layer-list>
1
Shailesh 26 ago. 2016 a las 09:11

Probé tu ejemplo, pero haciendo pequeños cambios y funcionó.
En lugar de aplicar gravedad a la etiqueta <item>, apliqué la etiqueta al mapa de bits y el resultado es claro para mí. Mi código xml es el siguiente:

<item>
    <shape>
        <solid android:color="@android:color/white" />
    </shape>
</item>
<item >
    <bitmap
        android:src="@drawable/ic_launcher" android:gravity="center|right"/>
</item>

Y en mi diseño los apliqué al RelativeLayout principal de la siguiente manera:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@drawable/my_background"
    android:layout_height="match_parent">

Aquí están mis resultados:
API de Android 23
ingrese la descripción de la imagen aquí

API de Android 19
ingrese la descripción de la imagen aquí

Sin atributo de gravedad en la API de Android 19
ingrese la descripción de la imagen aquí

Espero que esto te ayude

1
Ichigo Kurosaki 26 ago. 2016 a las 09:19