Android drawable 对于 API <23 和 API 23 及更高版本显示为拉伸

Posted

技术标签:

【中文标题】Android drawable 对于 API <23 和 API 23 及更高版本显示为拉伸【英文标题】:Android drawable appears stretched for API <23 and correctly for API 23 and above 【发布时间】:2018-01-22 23:26:39 【问题描述】:

我目前正在为我的列表视图使用列表选择器,并使用图层列表创建它。这是我的 xml 代码:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/menu_arrow"
    android:
    android:
    android:top="5dp"/>

<item android:top="0dp" android:left="5dp" android:bottom="0dp" android:right="0dp">
    <shape android:shape="rectangle">
        <solid android:color="@android:color/transparent"/>
    </shape>
</item>

当我构建应用程序时,它在 api 23 及更高版本上看起来很好。

但是对于 api 22 及以下,它看起来像这样:

我看到这篇帖子Shape drawable in layer-list rendered incorrectly for APIs below 23 并了解到属性宽度和高度仅适用于 api 23 及更高版本。所以我在尺寸标签内添加了宽度和高度,如下所示:

 <item android:drawable="@drawable/menu_arrow"
    android:top="5dp">
    <size android: android:/>
    </item>

但图像仍显得拉伸。 api 22 及以下版本需要什么属性才能使所有版本的drawable 看起来一致?

【问题讨论】:

你可以为每种类型创建drawable、drawable-v21和drawable-v23和Edit 或参考:***.com/questions/35083002/… 我已经有了每种类型的 xml 文件,api 22 的代码在 v21 文件夹中 你能发布 item_view.xml 吗? 尝试将 android:layout_ 设置为 listview 的 item_view 【参考方案1】:

我设法通过以下方式解决它:

<item android:drawable ="@drawable/menu_arrow"
    android:right="285dp"
    android:top="5dp"
    android:bottom="10dp"/>

我猜对于 api 23,我们可以使用宽度和高度。

【讨论】:

以上是关于Android drawable 对于 API <23 和 API 23 及更高版本显示为拉伸的主要内容,如果未能解决你的问题,请参考以下文章

android.graphics.drawable.RippleDrawable 错误

Android Drawable

Android Drawable

Android中的Drawable

Android Drawable 那些不为人知的高效用法

XUtils BitmapUtils 改造以加入drawable支持