使用可绘制的资源

我有这个问题,看跟踪堆栈:

E/AndroidRuntime(2410): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #5: <bitmap> requires a valid src attribute

我的 xml 文件如下:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<bitmap android:src="@drawable/btn_1"/>
</item>
</layer-list>

Btn _ 1是可绘制资源中的另一个 xml 文件 当我使用一个图像(* . png)代替 xml 绘制时,没有问题。

我可以使用一个可绘制的资源作为 src 位图? 以防万一,这里是我的 btn _ 1.xml 文件,即使 btn _ 1文件没有条目,它也不能工作。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/btn_arrow_bg_red"/>
<item>
<bitmap
android:gravity="center"
android:src="@drawable/btn_arrow_white" />
</item>
</layer-list>
26795 次浏览

你不能用 Xml 可绘制的作为位图的源。因为例如,如果可能的话,那么它可能会通过调用 xml 本身来错误地创建一个黑洞。

让我们假设,您有一个 xml 可绘制的 A,它有一个位图,其源是可绘制的 B。但是在可绘制的 B中,它有一个位图,其源是可绘制的 A。这将创建一个无法解决的循环。这就是为什么您需要提供一个图像作为位图的源,以避免任何混淆

为了避免错误: 二进制 XML 文件行 # XXX: 需要一个有效的 src 属性

在图层列表中,使用:

<item android:drawable="@drawable/image" />

而不是:

<item>
<bitmap android:src="@drawable/image"/>
</item>

最小 SDK: API 23

可绘制/yourDrawable.xml

在下面的代码中,我有一个矢量作为背景作为第一个项目,并在第二个项目中心的标志与自定义大小以上的背景。

<layer-list
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/background_in_svg_1">


</item>
<item
android:width="200dp"
android:height="60dp"
android:gravity="center_vertical|center_horizontal"
android:drawable="@drawable/logo_in_svg_2"/>
</layer-list>

注: 截至今日,空气污染指数23的累积分布为84.9% 。因此,您可以考虑使用较低 API 的替代方案

GL

来源

如果要使用选择器来更改色彩属性,请只为颜色创建选择器。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_pressed="true" />
<item android:color="@color/white" android:state_activated="true" />
<item android:color="@color/green" />
</selector>

然后用它作为机器人的颜色: 色彩

<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:tint="@color/tint_menu_item"
android:src="@drawable/ic_menu_home" />