棒棒糖前层列表中的项目大小不正确

Incorrect items sizing in layer-list on pre-lollipop

我有一个图层列表

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

<item android:right="2dp" android:left="2dp" android:bottom="2dp" android:top="2dp">
    <bitmap
        android:gravity="center"
        android:src="@drawable/ic_menu_alert"/>
</item>

<item android:height="10dp" android:width="10dp" android:gravity="right|top">
    <shape android:shape="oval">
        <size android:height="10dp" android:width="10dp"/>
        <solid android:color="@color/navigation_drawer_notification_red_color"/>
    </shape>
</item>

</layer-list>

显示这张图片

在 lollipop 及以上一切都很好,但在 pre-lollipop 红色圆圈上失去所有大小和填充属性,图像看起来像这样

我找了大约 3 天的解决方案,但一无所获。我试图制作自己的工具栏布局并设置为此 imagebuuton scaleType="centerInside" 但它没有帮助。谁能帮忙解决这个问题?

提前致谢!

所以我想出了一个可行的解决方案。我在 /drawable/drawable-v21 中有一个 layer-list 可绘制对象。 /drawable-v21 中的 layer-list 可绘制对象包含矢量可绘制对象。 /drawable 中的 layer-list 可绘制对象包含一个 .png 。这有点违背了使用矢量可绘制对象的目的,但我必须这样做才能使其在这种情况下起作用。

最好不要在layer-list中提及heightwidth属性。当您将其用作可绘制对象时,假设是一个 ImageView(ImageView 的宽度和高度将覆盖 item/shape 中提到的宽度和高度)。

您可以使用 top, bottom, left, right 在 layer-list 中对齐您的项目。

注意:仅从 API23.

开始支持项目的高度和宽度属性

这是一个工作示例(在 Android 7.0 和 Android 4.4 中测试):

sample.xml

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

    <item android:id="@+id/menu"
        android:left="16dp"
        android:right="16dp"
        android:gravity="center">
        <bitmap
            android:src="@drawable/menu_icon" />
    </item>

    <item
        android:top="8dp"
        android:left="56dp"
        android:right="24dp"
        android:bottom="42dp">
        <shape android:shape="oval">
            <solid android:color="@android:color/holo_red_dark"/>
        </shape>
    </item>

</layer-list>

main.xml

<ImageView
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:src="@drawable/sample"
        android:scaleType="fitCenter"/>

您还可以在 ImageView 中使用 wrap_content 作为高度和宽度。