使用可绘制资源

Ale*_*ets 52 android bitmap drawable xml-drawable

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

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

我的xml文件如下所示:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <bitmap android:src="@drawable/btn_1"/>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

小智 79

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

在图层列表中,使用:

<item android:drawable="@drawable/image" />
Run Code Online (Sandbox Code Playgroud)

代替:

<item>
  <bitmap android:src="@drawable/image"/>
</item>
Run Code Online (Sandbox Code Playgroud)

  • 是的,如果我需要tileMode,tint或位图上的任何其他许多属性,该怎么办? (17认同)
  • 但是如果我需要tileMode怎么办? (10认同)
  • 这显示了我的可绘制对象,但始终以全屏显示,而不是API 28上的正常显示。 (3认同)
  • 这对我来说是真正的解决方案!! (2认同)
  • 该解决方案没有解释它们之间的区别,并且在新的 api 版本上会中断 (2认同)

waq*_*lam 37

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

让假设,您有一个XML可绘其具有位图卫生组织源是可拉伸.但在抽拉,它具有一个位图卫生组织源是可拉伸.这将创建一个无法解决的循环循环.这就是为什么你需要提供一个图像作为位图的来源,以避免任何混淆

  • @waqaslam,你的答案是正确的:你不能将XML drawable作为位图标记的源.我发现令人困惑的是你的解释:循环引用可以在引用XML资源时在任何上下文中发生.在我看来,这是框架中的设计约束 (16认同)

COR*_*ian 12

最低 SDK: API 23

drawable/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>
Run Code Online (Sandbox Code Playgroud)

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

GL

来源