我有这个问题,请参阅跟踪堆栈:
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 drawable时,没关系。
我可以使用可绘制资源作为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>
答案 0 :(得分:67)
为避免错误:二进制XML文件行#XXX:需要有效的src属性
在图层列表中,使用:
<item android:drawable="@drawable/image" />
而不是:
<item>
<bitmap android:src="@drawable/image"/>
</item>
答案 1 :(得分:36)
您无法将 xml drawable 作为位图的来源。因为例如如果可能的话,它可能会错误地通过调用xml来创建一个黑洞。
让我们假设你有一个xml drawable A ,它有一个位图,其源是可绘制的 B 。但是在可绘制的 B 中,它有一个位图,其源是可绘制的 A 。这将创建一个无法解决的循环循环。这就是为什么你需要提供一个图像作为位图的来源,以避免任何混淆
答案 2 :(得分:1)
在下面的代码中,我将矢量作为背景作为第一项,在第二项中以徽标为中心,并在背景上方使用自定义尺寸。
<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>
答案 3 :(得分:1)
如果要使用选择器更改色度属性,请仅为颜色创建选择器。
<?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" />