VectorDrawableCompat 有什么用?

What VectorDrawableCompat is for?

我已经阅读了 this 篇文章,但对我来说仍然没有任何意义。

自 gradle 构建工具 1.5.0 以来,我们可以在应用程序中使用矢量绘图。对于 Lollipop 及以上版本,使用向量,对于 os 以下版本,gradle 生成 PNG 文件并将它们放置在 drawable_'density'_v4. 好了,明白了。

现在我们也有对矢量绘图的兼容性支持,我已经按照 this 说明在我的应用程序中支持它们,但是当它完成并且一切似乎都正常时,我仍然可以在 apk 文件中找到生成 PNG 文件。

那么,如果应该使用支持可绘制对象,有什么区别以及为什么会生成 PNG 文件?

对于Gradle 2 你需要添加:

android {  
   defaultConfig {  
      vectorDrawables.useSupportLibrary = true  
   }  
}  

给你的 build.gradle.

对于gradle 1.5

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

 aaptOptions {  
  additionalParameters "--no-version-vectors"  
   }  
 }  

这里有完整的细节:http://android-developers.blogspot.co.uk/2016/02/android-support-library-232.html

a)PNG 生成解决方案与。 b)VectorDrawableCompat 是:

1) APK 大小。对于 a),您最好使用多 apk,这样一个 APK 用于 >=21,一个 APK 用于 <21。这样,可以减少 >=21 的 APK 大小。 对于 b),无论最低 API 级别如何,都应减小整个 APK 的 APK 大小。

2) 功能限制。对于 a) Vectordrawable 中有一些很少使用的属性是不支持的。对于 b) 虽然支持所有属性,但它需要一些代码更改,例如从 anrdoid:src 到 app:srcCompat。

3) 参考:对于a),你可以在Java/XML中的任何地方引用VectorDrawable(或生成的PNG),而不知道它是不是Vector。但是对于b)你必须使用app:srcCompat来引用VectorDrawableCompat,或者在DrawableContainer中使用。

简而言之,如果您的目标是为所有 OS 版本提供最佳 APK 大小并且不介意稍微更改代码,请使用 VectorDrawableCompat。否则,PNG 生成 + 单独的 APK 就足够了。