API 23 以下的自定义可绘制匹配父项中的位图

Bitmap in custom drawable matching parent below API 23

我有一个 ListView,它的项目有一个指向末尾的箭头,如下所示:

箭头设置在后台,是自定义drawable:

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>

使用 API > 22 这很好用,但 22 及以下的背景看起来像这样:

这是我设置背景的方式:

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>

有什么方法可以解决此问题 而无需 添加箭头作为 ImageView?

您可以像这样更改您的 background_listitem.xml 文件,希望这对您有所帮助。

<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>

我试过你的例子,但做了一些小改动就成功了。
我没有将重力应用于 <item> 标签,而是将标签应用于位图,结果对我来说很清楚。 我的xml代码如下:

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

在我的布局中,我将它们应用于父 RelativeLayout,如下所示:

<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">

这是我的结果:
Android API 23

Android API 19

无重力属性 Android API 19

希望对您有所帮助