对于低于 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) 上的应用程序时,除了正方形我什么也得不到。
以防万一这有帮助:
- compileSdkVersion 23
- buildToolsVersion“23.0.3”
- minSdkVersion 11
- targetSdkVersion 23
- buildType 调试没有任何内容
- 依赖项:编译'com.android.support:appcompat-v7:23.0.1'
Activity
扩展了 AppCompatActivity
我认为这个问题与上层使用top
、left
、right
和bottom
有某种关系。因为如果我简单地在正方形之上放置一个圆圈,那么预览和 "real thing" 将按预期在所有 API 关卡上工作。
EDIT 我还用相同的代码/xml 和以下内容(自动创建)开始了一个全新的项目build.gradle
:
- compileSdkVersion 24
- buildToolsVersion“24.0.2”
- minSdkVersion 15
- targetSdkVersion 24
- buildType 调试没有任何内容
- 依赖项:编译'com.android.support:appcompat-v7:24.2.0'
Activity
扩展了 AppCompatActivity
这里的行为相同:如果我使用 top
、left
、right
和 [=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
设置 width
和 height
属性。
我想 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>
昨天,我切换到 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) 上的应用程序时,除了正方形我什么也得不到。
以防万一这有帮助:
- compileSdkVersion 23
- buildToolsVersion“23.0.3”
- minSdkVersion 11
- targetSdkVersion 23
- buildType 调试没有任何内容
- 依赖项:编译'com.android.support:appcompat-v7:23.0.1'
Activity
扩展了AppCompatActivity
我认为这个问题与上层使用top
、left
、right
和bottom
有某种关系。因为如果我简单地在正方形之上放置一个圆圈,那么预览和 "real thing" 将按预期在所有 API 关卡上工作。
EDIT 我还用相同的代码/xml 和以下内容(自动创建)开始了一个全新的项目build.gradle
:
- compileSdkVersion 24
- buildToolsVersion“24.0.2”
- minSdkVersion 15
- targetSdkVersion 24
- buildType 调试没有任何内容
- 依赖项:编译'com.android.support:appcompat-v7:24.2.0'
Activity
扩展了AppCompatActivity
这里的行为相同:如果我使用 top
、left
、right
和 [=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
设置 width
和 height
属性。
我想 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>