66

我有这个问题,请参阅跟踪堆栈:

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>
4

4 回答 4

116

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

在图层列表中,使用:

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

代替:

<item>
  <bitmap android:src="@drawable/image"/>
</item>
于 2014-06-27T11:57:13.057 回答
55

您不能将xml drawable作为位图的源。因为例如,如果可能的话,它可能会通过调用自身的 xml 错误地创建一个黑洞。

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

于 2012-03-20T14:43:55.030 回答
12

最低 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>

注意:截至今天,API 23 的累积分布为 84.9%。因此,您可能会考虑使用较低 API 的替代方案

总帐

资源

于 2019-08-01T13:12:52.840 回答
3

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

<?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>

然后将其用作 android:tint 中的颜色

<ImageView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:tint="@color/tint_menu_item"
    android:src="@drawable/ic_menu_home" />
于 2020-09-08T22:03:50.470 回答