在Android选择器中使用SVG来制作按钮

6

我正在使用SVG图标作为ImageView的图像,可以使用app:srcCompat进行设置。但是当我想将它用于作为选择器的Buttons时,在API小于21的设备上会出现找不到资源的异常导致应用程序崩溃。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_enabled" android:state_enabled="true" />
    <item android:drawable="@drawable/button_disabled" android:state_enabled="false" />
</selector>

其中 button_enabled 和 button_disabled 都是 SVG 格式的按钮


1
应用程序崩溃,显示资源未找到异常。请问是哪个设备和API级别? - OBX
抱歉,我会更新我的问题。 - Vishwajit Palankar
@Superman,对于21以下的API级别会崩溃。 - Vishwajit Palankar
4个回答

5
我有自己问题的答案。 在你的活动中只需添加此静态块。
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

5
我可以帮助您进行翻译。以下是需要翻译的内容:

我建议你按照以下步骤进行:

步骤1:

select svg from local folder

右键单击drawable文件夹 -> 选择新建 -> 选择矢量素材

步骤2:

click on next

选择本地文件svg,现在选择您的svg图像的路径,点击下一步,您现在将在drawable文件夹中拥有svg图像

对于您想在应用程序中使用的svg图像,执行相同的操作

现在使用以下代码作为选择器按钮的selector_button.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_check_circle" android:state_pressed="true" />
    <item android:drawable="@drawable/ic_build" android:state_focused="true" />
    <item android:drawable="@drawable/ic_build" />
</selector>

我导入了两个svg,第一个是ic_check_circle,第二个是ic_build,您可以根据需要进行替换。

在您的imageView中使用以下行

app:srcCompat="@drawable/selector_button" 

如果我想将它用于复选框按钮标签,该怎么办? - Vishwajit Palankar
@VishwajitPalankar,请查看以下关于复选框选择的答案,希望它能帮到你,如果不行请告诉我。 - Pranav Darji

2

Android中的SVG渲染是针对API 21及以上版本,即从棒棒糖(Lollipop)开始。由于崩溃发生在较低版本中,因此您需要对SVG进行向后兼容。

这里有两个解决方案:

  1. 使用Victor库,它支持向后兼容。可在此处获得: [ 这里 ]。同时请参阅此详细的Medium文章,了解在Android中使用矢量图标的方法: [ 这里 ]
  2. 从Android支持库v23.2开始,SVG的使用已经向后兼容到API v7. 详细指南可在此处获取: [ 这里 ]。也可以看看这个回答: [这里]

1
请使用以下的 selector_checkbox.xml 文件。
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_check_circle" android:state_checked="true" android:state_focused="true" />
    <item android:drawable="@drawable/ic_uncheck_circle" android:state_checked="false" android:state_focused="true" />
    <item android:drawable="@drawable/ic_uncheck_circle" android:state_checked="false" />
    <item android:drawable="@drawable/ic_check_circle" android:state_checked="true" />
</selector>

在上面的步骤中,ic_check_circleic_uncheck_circle都是从本地文件导入的svg文件。

在您的xml文件中,使用以下代码来创建复选框,并将selector_checkbox.xml文件作为按钮即可完成。

<android.support.v7.widget.AppCompatCheckBox
        android:id="@+id/appCompatCheckBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@drawable/selector_checkbox" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接