Android 使用可提取资源
我遇到此问题,请参阅跟踪堆栈:Android 使用可提取资源,android,bitmap,drawable,xml-drawable,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 E/AndroidRuntime(2410):由以下原因引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#5:需要有效的sr
E/AndroidRuntime(2410): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #5: <bitmap> requires a valid src attribute
E/AndroidRuntime(2410):由以下原因引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#5:需要有效的src属性
我的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>
位图的源代码不能是可绘制的xml。因为,例如,如果可能的话,它可能会错误地通过调用自身的xml来创建一个黑洞
假设您有一个xml可绘制A,其中有一个位图,其源是可绘制B。但是在drawableB中,它有一个源为drawablea的位图。这将创建无法解析的循环。这就是为什么您需要提供一个图像作为位图的源以避免任何混淆以避免错误:二进制XML文件行#XXX:需要有效的src属性 在图层列表中,使用:
<item android:drawable="@drawable/image" />
而不是:
<item>
<bitmap android:src="@drawable/image"/>
</item>
最小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>
注:截至今天,API 23的累积分布为84.9%。所以你可以考虑一个更低API的替代方案
德国劳埃德船级社
如果要使用选择器更改色调属性,请仅为颜色创建选择器
<?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中的颜色:色调
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:tint="@color/tint_menu_item"
android:src="@drawable/ic_menu_home" />
thx。但是,嗯,我该怎么办?我需要将一个可绘制的xml资源置于另一个资源之上,但我的资源正在扩展。。。我必须做什么来避免扩展xml可绘制资源?并且没有重力参数…当我使用矢量图像作为位图时,我遇到了这个错误(需要有效的src属性
)。我的解决方案是-使用@Santiago Rivas answer-或者使用另一个图像(不是矢量图像)谢谢这个Waqas,我有完全相同的问题(但没有合并,因为这标记为已回答)-但我要求的是解决方案:@waqaslam,您的答案是正确的:您不能将可绘制的XML作为位图标记的源。我感到困惑的是您的解释:在引用XML资源时,循环引用可以发生在任何上下文中。在我看来,这是框架中的一个设计约束。第二部分是无关紧要的,但是如果我需要tileMode呢?是的,如果我需要tileMode、tint或位图上的任何其他属性呢…?这对我来说是真正的解决方案!!这显示了我的drawable,但它始终显示全屏大小,而不是API 28上的正常大小。此解决方案没有解释它们之间的差异,并且在新的API版本上出现了中断。请注意,宽度和高度只有在min高于23@Skizo-奥兹ᴉʞ的最新答复。非常感谢。