在Android 4以上版本中,Vector Drawable可以直接使用

时间:2018-11-04 00:51:33

标签: android android-vectordrawable androidx

我在Android 4+上从XML和代码使用矢量可绘制对象而没有任何问题。

设置:启用了Jetifier的Android Gradle插件3.2.1,Android Studio 3.2.1,Gradle 4.10.1,android-x支持库。

用法示例:

  • app:srcCompat="@drawable/some_vector_drawable"
  • android:drawableLeft="@drawable/some_vector_drawable"
  • view.setBackgroundResource(R.drawable.some_vector_drawable)

许多官方或不太官方的博客或堆栈溢出帖子都提及以下用途:

    android.defaultConfig.vectorDrawables.useSupportLibrary = true中的
  • build.gradle

  • 和/或:AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)来自代码

但是我的矢量可绘制对象到处都可以正常运行,而没有这些。

是否有任何正式的最终文件?这些标志是否必要?

我唯一注意到的是Android Studio中的此警告,我将其忽略:

  

要使用矢量可绘制兼容性,您需要设置defaultConfig.vectorDrawables.useSupportLibrary = true

2 个答案:

答案 0 :(得分:1)

Vector drawables overview推荐它,但没有说明它是必需的。

它也这样说:

  

Android Studio 1.4通过在构建时生成PNG文件引入了对矢量可绘制对象的有限兼容性支持。

目前尚不清楚,Release Notes for 1.4实际上并未对矢量Drawables提及太多。但是,似乎是在说,当您不告诉Gradle您要使用支持库时,它将为每个矢量生成依赖于密度的PNG,并且大概在较旧的设备上使用这些PNG来代替矢量。< / p>

如果是这样,那么您确实应该使用支持库。为每个DPI生成PNG会使您的应用程序大小大大膨胀。我很确定支持库会在运行时为不支持矢量的设备生成PNG,这意味着APK很小。

答案 1 :(得分:1)

没有:

  

android.defaultConfig.vectorDrawables.useSupportLibrary = true

build.gradle中,为每个可绘制的矢量生成PNG,并成为结果.apk文件的一部分。

启用上述标志,可以进行以下操作:

    布局xml中的
  • app:srcCompat="@drawable/some_vector_drawable"
  • 菜单xml中的
  • android:icon="@drawable/some_vector_drawable"
  • 代码中的
  • imageView.setImageResource(R.drawable.some_vector_drawable)

    (但矢量可绘制对象必须是单个矢量(即:以<vector开头))

  • 从代码中获取VectorDrawable:

    Drawable vectorDrawable = VectorDrawableCompat.create(resources, R.drawable.some_vector_drawable, null)

    然后可以将其用作常规可绘制对象(例如:imageView.setImageDrawable(vectorDrawable)

同时使用:

  

android.defaultConfig.vectorDrawables.useSupportLibrary = true

     

&AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

VectorDrawables的工作原理几乎就像是Android 4+上的本机一样。 但是,Google警告说,使用AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)可能会导致内存问题或Configuration对象的问题(我还没有遇到过)。