我编写了一个带有自定义属性的自定义复合视图。其中一个自定义属性是drawable,我希望使用的文件是Vector Drawable。
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomView, 0, 0)
val iconDrawable = typedArray.getDrawable(R.styleable.CustomView_icon_drawable)
我不断收到XmlPullParserException:二进制XML文件行#1:无效的可绘制标记向量
为什么会这样?
答案 0 :(得分:10)
Android 4.4(API 20)支持矢量绘图。因此,如果 build.gradle 文件中的最低API级别(minSdkVersion
)设置为小于20,请确保使用支持库。
要启用支持库,请在应用级 build.gradle 中添加以下行:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
将 attrs.xml 中的属性定义为引用类型:
<declare-styleable name="CustomView">
<attr name="icon_drawable" format="reference" />
</declare-styleable>
最后,为了能够在.xml布局文件中获取指定drawable的实例,获取可绘制的资源ID并使用支持类ContextCompat
创建此Drawable的实例
final int drawableResId = typedArray.getResourceId(R.styleable.CustomView_icon_drawable, -1);
final Drawable drawable = ContextCompat.getDrawable(getContext(), drawableResId)
答案 1 :(得分:10)