当前位置: 首页 > 知识库问答 >
问题:

如何在Android中使用VectorDrawable

澹台奇略
2023-03-14

我试图使用VectorDrawable作为单选切换按钮,但在API 17级设备中出现了“invalid drawable tag vector”错误。

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

我在一个片段中使用它,我在包装片段的活动中将setCompatVectorFromResourcesEnabled设置为true。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

另外,我设置了

vectorDrawables.useSupportLibrary = true

在build.gradle

这是视图xml,

<RadioGroup
    android:id="@+id/list_view_type"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_gravity="end"
    android:gravity="center_vertical|end"
    android:padding="15dp"
    android:orientation="horizontal">

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/list_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="15dp"
        android:layout_marginRight="15dp"
        android:background="@drawable/grid_btn_toggle"
        android:button="@android:color/transparent"
        android:gravity="center"
        android:maxLines="1"
        android:text="" />

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/grid_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/list_btn_toggle"
        android:button="@android:color/transparent"
        android:checked="true"
        android:gravity="center"
        android:maxLines="1"
        android:text="" />
</RadioGroup>

这是一个矢量图像内容

<vector android:height="24dp" android:viewportHeight="21.0"
    android:viewportWidth="21.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#c3c3c3" android:pathData="M2.5,0L2.5,0A2.5,2.5 0,0 1,5 2.5L5,2.5A2.5,2.5 0,0 1,2.5 5L2.5,5A2.5,2.5 0,0 1,0 2.5L0,2.5A2.5,2.5 0,0 1,2.5 0z"/>
    <path android:fillColor="#c3c3c3" android:pathData="M2.5,8L2.5,8A2.5,2.5 0,0 1,5 10.5L5,10.5A2.5,2.5 0,0 1,2.5 13L2.5,13A2.5,2.5 0,0 1,0 10.5L0,10.5A2.5,2.5 0,0 1,2.5 8z"/>
    <path android:fillColor="#c3c3c3" android:pathData="M2.5,16L2.5,16A2.5,2.5 0,0 1,5 18.5L5,18.5A2.5,2.5 0,0 1,2.5 21L2.5,21A2.5,2.5 0,0 1,0 18.5L0,18.5A2.5,2.5 0,0 1,2.5 16z"/>
    <path android:fillColor="#c3c3c3" android:pathData="M7,1.455L20,1.455a1,1 0,0 1,1 1L21,2.455a1,1 0,0 1,-1 1L7,3.455A0,0 0,0 1,7 3.455L7,1.455A0,0 0,0 1,7 1.455Z"/>
    <path android:fillColor="#c3c3c3" android:pathData="M7,9.455L20,9.455a1,1 0,0 1,1 1L21,10.455a1,1 0,0 1,-1 1L7,11.455A0,0 0,0 1,7 11.455L7,9.455A0,0 0,0 1,7 9.455Z"/>
    <path android:fillColor="#c3c3c3" android:pathData="M7,17.455L20,17.455a1,1 0,0 1,1 1L21,18.455a1,1 0,0 1,-1 1L7,19.455A0,0 0,0 1,7 19.455L7,17.455A0,0 0,0 1,7 17.455Z"/>
</vector>

有什么方法可以在android中使用VectorDrawable:drawable在API级别16或17的选择器中使用吗?

Build.grade内容,

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {

    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    dataBinding {
        enabled = true
    }
    defaultConfig {
        applicationId "jp.dandoli.dandoliworks"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile 'com.android.support:design:26.1.0'
    compile 'com.android.support:support-v4:26.1.0'

    kapt "com.android.databinding:compiler:3.0.0-rc2"

    implementation "android.arch.lifecycle:runtime:1.0.0"
    implementation "android.arch.lifecycle:extensions:1.0.0-alpha9-1"

    implementation "com.android.support:cardview-v7:26.1.0"
    implementation "com.android.support:recyclerview-v7:26.1.0"

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxkotlin:2.1.0'

    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

    compile 'com.squareup.okhttp3:okhttp:3.8.1'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.0'

    compile 'com.google.code.gson:gson:2.8.0'

    compile 'com.squareup.picasso:picasso:2.5.2'
}

共有2个答案

蒙化
2023-03-14

您应该将您的自定义Drawable应用于android: button属性,而不是android: background:https://developer.android.com/reference/android/widget/CompoundButton#attr_android:按钮

南宫兴德
2023-03-14

使用动画选择器

实例

https://github.com/alexjlockwood/adp-delightful-details

https://www.androiddesignpatterns.com/2016/11/introduction-to-icon-animation-techniques.html

使用此工具创建动画矢量文件

https://shapeshifter.design/

 类似资料:
  • 问题内容: 我想在Android设备上使用。该断言似乎不起作用,因此我在网上搜索后发现了这种本地解决方案: 亚行外壳setprop debug.assert 1 它确实可以在我的本地计算机上运行。 我想使用我的Eclipse项目运行此命令(因此它将在源代码控件中)。我该怎么做? 问题答案: 断言无法在Android中运行,因为大多数情况下,一个人不是在调试模式下运行,而是运行一些优化的代码。因此,

  • 问题内容: 在Smack 4.1之前,必须依靠aSmack。从4.1开始,Smack将在Android上本地运行。我有几个“入门”问题。 问题1: 如何在Eclipse的Android项目中包含Smack 4.1? https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade- Guide上 的说明似乎适用于An

  • 问题内容: 我问这个问题是因为我是Java和Android的新手,我花了数小时试图找出答案。答案来自一系列相关的答案,所以我想我会把自己学到的东西记录下来,以供其他可能挣扎的人使用。查看答案。 我正在使用Android Studio 2.1.2,并且我的Java设置如下: 问题答案: 注意:这个答案虽然在技术上是正确的,但是现在已经过时了 现在可通过Android Gradle插件4.0.0+获得

  • 它以异步方式运行。完成操作后,我想为TextView详细信息分配名称和填充。 在这种情况下,如何使用?

  • 问题内容: 我有点困惑,因为我不知道如何在这里解释该教程:http : //developer.android.com/training/basics/data- storage/databases.html#DbHelper 到目前为止,我的代码如下所示: 我的解释是否正确,或者Helper类中的前6个变量不在Contract类中?还是助手类不是合同类的内部类? 希望你能帮我 问题答案: 您的合

  • HomeFragment.java fragment_home 我看了其他问题。但我的应用程序不起作用。所以我想知道我是否需要修理我的主activity。所以我附上了主activity。 mainactivity.java 对不起,我英语不好。所以在翻译的帮助下...我第一次问了stackoverflow。 我在为韩国人做一个应用程序。但我在碎片上有些问题。 如果输入了webview,App将被关