13

昨天,我切换到了 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 作为“在 IDE 中渲染布局时使用的 Android 版本”,这就是我现在在预览中得到的。

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

橙色正方形,没有圆形

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

以防万一这有帮助:

  • compileSdkVersion 23
  • 构建工具版本“23.0.3”
  • minSdkVersion 11
  • targetSdkVersion 23
  • buildType 调试没有任何内容
  • 依赖项:编译'com.android.support:appcompat-v7:23.0.1'
  • Activity延伸_AppCompatActivity

我认为这个问题在某种程度上与上层的, 和的top使用left有关。因为如果我只是在正方形顶部放置一个圆圈,则预览以及“真实事物”对于所有 API 级别都按预期工作。rightbottom

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

  • compileSdkVersion 24
  • 构建工具版本“24.0.2”
  • minSdkVersion 15
  • targetSdkVersion 24
  • buildType 调试没有任何内容
  • 依赖项:编译'com.android.support:appcompat-v7:24.2.0'
  • Activity延伸_AppCompatActivity

top这里的行为相同:如果我使用,和值 != 0 left,则不会为 API 级别 <= 22 渲染上层 。rightbottom


所以我的问题是:如何使用 Android Studio 2.1.3 为所有 API 级别创建“带有插图”的形状可绘制对象?

4

1 回答 1

16

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

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

可以在“item”标签内设置宽度和高度

就像@android 开发人员在这篇 SO 帖子中所说的那样

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

我想 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>
于 2016-09-09T13:52:07.093 回答