Android矢量兼容性

时间:2015-08-07 06:23:05

标签: android vector drawable

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

我对任何第三方compat库都不感兴趣,并且乐于等待googles版本(这里提到VectorDrawable - is it available somehow for pre-Lollipop versions of Android?)。

所以基本上现在我很高兴继续获得每个分辨率的图像以及>的附加信息。棒糖。如果设备高于21,它将使用向量,否则它将回退到标准png。

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

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

5 个答案:

答案 0 :(得分:2)

现在谷歌发布Android Support Library 23.2支持向量Drawables和动画矢量Drawables!

displayvalue: "REVIEWER" label: "REVIEWER"
  

注意:

     

- 将图像一直传回API 7(Android 2.1 Eclair)。

     

- 动画矢量稍微有限,只能追溯到最后   作为API 11

答案 1 :(得分:2)

为了向后兼容Vector Drawable,这里是我用于API Level 20之前设备的以下配置。

<强>的build.gradle

vectorDrawables.useSupportLibrary = true

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

<强>活动

onCreate&gt; AppCompatDelegate.setCompatVectorFromResourcesEnabled(真);

XML ImageView

app:srcCompat="@drawable/vector"

程序化ImageView

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>

答案 2 :(得分:1)

从Android 5.0(API级别21),您可以在应用中使用矢量drawable。您可以使用名为Vector Asset Studio的新Android Studio工具。它自动处理旧版本的PNG。请参阅以下链接以获取完整说明:

Vector Asset Studio

答案 3 :(得分:1)

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

所以现在你可以使用

app:srcCompat

而不是

app:src

使用具有向后兼容性的VectorDrawable

答案 4 :(得分:0)

if you use SRC the use this:
you don't need to add that line in every activity, if you added it once in the Application class it will work as well.

public class App extends Application {

static {

    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

REMEMBER: You still need to have enabled the use of the support library in gradle:

android {

  defaultConfig {

    vectorDrawables.useSupportLibrary = true

  }

}

Inside xml use:

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

When you want to use vector drawable as drawableTop, bottom, right ,left then used LayerDrawable otherwise it crash on device lower than 5.0

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