【问题标题】:Using SVG in android selector for buttons在按钮的 android 选择器中使用 SVG
【发布时间】:2017-06-07 17:19:30
【问题描述】:

我将 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

【问题讨论】:

  • the app crashes with resource not found exception 哪个设备和 API 级别?
  • 抱歉,我会更新我的问题
  • @Superman 它在 api 级别低于 21 时崩溃

标签: android svg


【解决方案1】:

我建议您按照以下步骤操作:-

第一步:

右键单击可绘制文件夹 -> 选择新建 -> 选择 V​​aector Assests

第二步:

选择本地文件 svg 现在选择你的 svg 图像的路径点击下一步,你将在你的可绘制文件夹中拥有 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" 

【讨论】:

  • 如果我想将它用于复选框按钮标签怎么办?
  • @VishwajitPalankar 请参阅下面的 CheckBox 选择答案希望如果不让我知道它会对您有所帮助。
【解决方案2】:

我有自己问题的答案。 在你的活动中添加这个静态块

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

【讨论】:

    【解决方案3】:

    Android 中的 SVG 渲染针对 API 级别 21 和 +。即从棒棒糖开始。由于崩溃发生在较低版本中,因此您需要的是 SVG 的向后兼容性。

    理想情况下,这里有两种解决方案:

    1. 使用支持向后兼容性的 Victor 库。有空 [ here ]。另请查看有关 Android 中矢量使用的详细媒体文章。 [ here ]
    2. 从 Android 支持库 v23.2 开始,SVG 的使用已经向后兼容,直到 API v 7。详细指南可用 [here]。另请参阅此答案。 [here]

    【讨论】:

      【解决方案4】:

      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 文件中使用下面的 CheckBox 代码并将 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" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-29
        相关资源
        最近更新 更多