昨天,我已切换到Android Studio 2.1.3版。今天,我重新打开了我的一个项目,并尝试添加一些图层列表drawable用于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)上运行应用程序时,我也只得到正方形。
以防这有用:
Activity
扩展AppCompatActivity
我认为问题在某种程度上与上层使用top
,left
,right
和bottom
有关。因为如果我只是在一个正方形的顶部放置一个圆圈,预览以及“真实的东西”就可以按预期在所有API级别上工作。
编辑我还启动了一个全新的项目,其中包含相同的代码/ xml和以下内容(自动创建)build.gradle
:
Activity
扩展AppCompatActivity
此处的行为相同:如果我使用top
,left
,right
和bottom
值,则不会为API级别&lt; = 22呈现上层! = 0。
所以我的问题是:如何使用Android Studio 2.1.3为所有API级别创建“with insets”形状drawable?
答案 0 :(得分:12)
首先,我要感谢@pskink帮助我分析问题:)
问题中的xml适用于API级别23+,因为
中的this SO post状态类似可以在“item”标签
中设置宽度和高度
它不适用于较低版本,因为需要使用width
标记为height
设置ShapeDrawable
和size
属性。
我认为Android需要大小来计算如何缩放drawable( - &gt;宽高比!),同时考虑插图(上,左,右,下)。
有时候格式错误(对于特定的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>