对于低于 23 的 API,图层列表中的可绘制形状呈现不正确

Shape drawable in layer-list rendered incorrectly for APIs below 23

昨天,我切换到 Android Studio 版本 2.1.3。今天,我重新打开了我的一个项目,并尝试添加一些图层列表可绘制对象以用于 ImageView。例如这个:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:width="80px" android:height="80px"
        android:top="0px" android:left="0px" 
        android:right="0px" android:bottom="0px">
        <shape android:shape="rectangle">
            <solid android:color="@color/deep_orange"/>
        </shape>
    </item>
    <item android:width="60px" android:height="60px"
        android:top="10px" android:left="10px" 
        android:right="10px" android:bottom="10px">
        <shape android:shape="oval">
            <solid android:color="@color/light_yellow"/>
        </shape>
    </item>
</layer-list>

这是我在升级我的 Android Studio 版本之前得到的,如果我选择 23 作为 "Android version to use when rendering layouts in the IDE",这就是我现在在预览中得到的。

但是,如果我选择低于 23 的任何版本,我只会得到正方形:

不幸的是,当 运行 模拟器 (Lollipop 22) 或设备 (Jellybean 18) 上的应用程序时,除了正方形我什么也得不到。

以防万一这有帮助:

我认为这个问题与上层使用topleftrightbottom有某种关系。因为如果我简单地在正方形之上放置一个圆圈,那么预览和 "real thing" 将按预期在所有 API 关卡上工作。

EDIT 我还用相同的代码/xml 和以下内容(自动创建)开始了一个全新的项目build.gradle:

这里的行为相同:如果我使用 topleftright 和 [=17,则不会为 API 级别 <= 22 渲染上层=] 值 != 0.


所以我的问题是:如何使用 Android Studio 2.1.3 为所有 API 级别创建形状可绘制对象 "with insets"?

首先感谢@pskink帮我分析问题:)

问题中的 xml 适用于 API 23+ 级,因为

it is possible to set width and height right within the "item" tag

喜欢@android developer states in

它不适用于较低版本,因为需要使用 size 标签为 ShapeDrawable 设置 widthheight 属性。

我想 Android 需要大小来确定如何缩放可绘制对象(-> 纵横比!),同时考虑到插图(顶部、左侧、右侧、底部)。

有时格式错误(对于特定 API 级别)xml,Android 无声地失败,根本没有绘制形状。

所以解决方案是:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:width="80px" android:height="80px"
        android:top="0px" android:left="0px" 
        android:right="0px" android:bottom="0px">
        <shape android:shape="rectangle">
            <solid android:color="@color/deep_orange"/>
        </shape>
    </item>
    <item android:width="60px" android:height="60px"
        android:top="10px" android:left="10px" 
        android:right="10px" android:bottom="10px">
        <shape android:shape="oval">
            <solid android:color="@color/light_yellow"/>
            <size android:height="60px" android:width="60px"/>
        </shape>
    </item>
</layer-list>