Android矢量兼容性

Android矢量兼容性,android,vector,drawable,Android,Vector,Drawable,我想开始在我做的应用程序中使用图标向量,但不确定如何处理兼容性 我对任何第三方compat库都不感兴趣,我很乐意等待谷歌的版本(这里提到) 所以基本上现在我很高兴继续拥有每种分辨率的图像以及一个额外的for>棒棒糖。如果设备高于21,则将使用矢量,否则将返回到标准png 我可以将矢量放在drawable-v21文件夹中,但drawable-[dpi]文件夹优先于版本,这意味着不使用矢量 我希望使用矢量,这样当compat可用时,我就可以简单地删除所有png,并知道矢量是可以的,因为我已经能够在运

我想开始在我做的应用程序中使用图标向量,但不确定如何处理兼容性

我对任何第三方compat库都不感兴趣,我很乐意等待谷歌的版本(这里提到)

所以基本上现在我很高兴继续拥有每种分辨率的图像以及一个额外的for>棒棒糖。如果设备高于21,则将使用矢量,否则将返回到标准png

我可以将矢量放在drawable-v21文件夹中,但drawable-[dpi]文件夹优先于版本,这意味着不使用矢量


我希望使用矢量,这样当compat可用时,我就可以简单地删除所有png,并知道矢量是可以的,因为我已经能够在运行棒棒糖的设备上测试它们。

编辑:这是一个临时修复,直到Android studio 1.4发布。不再需要这样做了。请参见Ka开发者的答案

找到了一个解决方案,虽然不是很出色,但确实有效

您需要为每个dpi文件夹创建一个lollypop drawables文件夹,并向每个文件夹添加相同的向量

例如创建文件夹

drawable-hdpi-v21
可拉伸-xhdpi-v21
可拉伸-xxhdpi-v21

drawable-xxxhdpi-v21

编辑:在Android studio 1.4发布之前,这是一个临时补丁。不再需要这样做了。请参见Ka开发者的答案

找到了一个解决方案,虽然不是很出色,但确实有效

您需要为每个dpi文件夹创建一个lollypop drawables文件夹,并向每个文件夹添加相同的向量

例如创建文件夹

drawable-hdpi-v21
可拉伸-xhdpi-v21
可拉伸-xxhdpi-v21
drawable-xxxhdpi-v21

来自Android 5.0(API级别21),您可以在应用程序中使用vector drawable。您可以使用新的Android Studio工具:Vector Asset Studio。它自动处理旧版本的PNG制作。有关完整的说明,请参见下面的链接:

在Android 5.0(API级别21)中,您可以在应用程序中使用vector drawable。您可以使用新的Android Studio工具:Vector Asset Studio。它自动处理旧版本的PNG制作。有关完整的说明,请参见下面的链接:


使用Android支持库23.2, 现在,从API级别7开始支持VectorDrawables,从API级别11开始支持动画VectorDrawables

所以现在你可以使用

app:srcCompat

而不是

app:src


用于使用具有向后兼容性的VectorDrawable。

与Android支持库23.2, 现在,从API级别7开始支持VectorDrawables,从API级别11开始支持动画VectorDrawables

所以现在你可以使用

app:srcCompat

而不是

app:src

用于使用向后兼容的
VectorDrawable
s。

现在谷歌发布了支持向量可绘制文件和动画向量可绘制文件

 // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  
注意:

-矢量图像一直回到API 7(Android 2.1 Eclair)。

-动画向量有点有限,只能追溯到很久以前 与API 11一样

现在谷歌发布了支持向量绘图和动画向量绘图

 // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  
注意:

-矢量图像一直回到API 7(Android 2.1 Eclair)。

-动画向量有点有限,只能追溯到很久以前 与API 11一样


为了使Vector Drawable具有向后兼容性,这里是我用于API级别20之前的设备的以下配置

build.gradle

vectorDrawables.useSupportLibrary = true

dependencies{classpath 'com.android.tools.build:gradle:2.1.2'}
活动

onCreate>AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

XML图像视图

app:srcCompat="@drawable/vector"
imageView.setBackgroundResource(R.vector);
编程图像视图

app:srcCompat="@drawable/vector"
imageView.setBackgroundResource(R.vector);
vector.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="30dp"
        android:height="20dp"
        android:viewportHeight="20.0"
        android:viewportWidth="30.0">
    <path
        android:fillColor="#4C5F70"
        android:pathData="DATA_HERE"
        android:strokeColor="#00000000"
        android:strokeWidth="1"/>
</vector>

为了向后兼容Vector Drawable,我为API级别20之前的设备使用了以下配置

build.gradle

vectorDrawables.useSupportLibrary = true

dependencies{classpath 'com.android.tools.build:gradle:2.1.2'}
活动

onCreate>AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

XML图像视图

app:srcCompat="@drawable/vector"
imageView.setBackgroundResource(R.vector);
编程图像视图

app:srcCompat="@drawable/vector"
imageView.setBackgroundResource(R.vector);
vector.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="30dp"
        android:height="20dp"
        android:viewportHeight="20.0"
        android:viewportWidth="30.0">
    <path
        android:fillColor="#4C5F70"
        android:pathData="DATA_HERE"
        android:strokeColor="#00000000"
        android:strokeWidth="1"/>
</vector>

如果使用SRC,则使用以下命令:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
您不需要在每个活动中都添加该行,如果在应用程序类中添加一次,它也可以工作。像这样:

public class App extends Application {

static {

    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
请记住:您仍然需要在应用程序级gradle中启用支持库的使用:

android {

  defaultConfig {

    vectorDrawables.useSupportLibrary = true

  }

}
内部xml使用:

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:srcCompat="@drawable/ic_add" /> 

如果要将vector drawable用作drawableTop、bottom、right、left,请使用LayerDrawable,否则它将在低于5.0的设备上崩溃

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/search"/>
</level-list>

如果使用SRC,则使用以下命令:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
您不需要在每个活动中都添加该行,如果在应用程序类中添加一次,它也可以工作。像这样:

public class App extends Application {

static {

    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
请记住:您仍然需要在应用程序级gradle中启用支持库的使用:

android {

  defaultConfig {

    vectorDrawables.useSupportLibrary = true

  }

}
内部xml使用:

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:srcCompat="@drawable/ic_add" /> 

如果要将vector drawable用作drawableTop、bottom、right、left,请使用LayerDrawable,否则它将在低于5.0的设备上崩溃

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/search"/>
</level-list>


@JaiSoni现在比较你的链接和OP的链接…关于如何使用appcompat向量的实际信息-@JaiSoni现在比较你的链接和OP的链接…关于如何使用appcompat向量的实际信息-很好的更新。你有关于这个细节的链接吗。谷歌有没有提供任何关于它的细节。更新得不错。你有关于这个细节的链接吗。谷歌有没有提供任何关于它的细节。