作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近收到一份关于运行 API 16 的设备的崩溃报告:
org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector
据我所知,它是由于 API 16 中缺少对 VectorDrawable 的支持而产生的。
老实说,我不知道我有这样的绘图,根据 git log
看起来它们是在我启用矢量库时自动生成的。
我想定义一个复选框背景,我应该保留 VectorDrawable 吗?如果是这样,我应该如何支持较低的 API?如果我删除它们,它们不会再次自动生成吗?
这是复选框声明:
<CheckBox
android:id="@+id/reminder_enabled_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:padding="10dp"
android:button="@drawable/notification_icon_checkbox" />
这是选择器:(notification_icon_checkbox
):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:drawable="@drawable/ic_notifications_none_black_24dp" />
<item android:state_checked="true" android:drawable="@drawable/ic_notifications_black_24dp" />
<item android:drawable="@drawable/ic_notifications_none_black_24dp" /> <!-- default state -->
</selector>
可绘制的ic_notifications_none_black_24dp
既是.png
文件又是VectorDrawable
xml文件:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M11.5,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.9,2 2,2zm6.5,-6v-5.5c0,-3.07 -2.13,-5.64 -5,-6.32V3.5c0,-0.83 -0.67,-1.5 -1.5,-1.5S10,2.67 10,3.5v0.68c-2.87,0.68 -5,3.25 -5,6.32V16l-2,2v1h17v-1l-2,-2z" />
</vector>
最佳答案
将其添加到模块级 build.gradle
vectorDrawables.useSupportLibrary = true
将其添加到您的 Activity/Fragment
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
从 XML 中删除矢量可绘制对象
<CheckBox
android:id="@+id/reminder_enabled_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:padding="10dp"
/>
像这样以编程方式设置 CheckBox 自定义可绘制对象
CheckBox cb = findViewById(R.id.reminder_enabled_checkbox);
cb.setButtonDrawable(AppCompatResources.getDrawable(getContext(), R.drawable.notification_icon_checkbox));
关于android - 使用 VectorDrawable 作为复选框背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43501930/
我是一名优秀的程序员,十分优秀!