关于android:VectorDrawableCompat 是干什么用的?

What VectorDrawableCompat is for?

我读过这篇文章,但对我来说仍然没有意义。

从 gradle build tools 1.5.0 开始,我们可以在应用程序中使用矢量绘图。对于 Lollipop 及以上的向量使用,对于以下的 os 版本,gradle 生成 PNG 文件并将它们放在 drawable_\\'density\\'_v4 中。
好的,很清楚。

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

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


对于 Gradle 2,您需要添加:

1
2
3
4
5
android {  
   defaultConfig {  
      vectorDrawables.useSupportLibrary = true  
   }  
}

到你的 build.gradle.

对于 gradle 1.5

1
2
3
4
5
6
7
8
9
android {  
   defaultConfig {  
     generatedDensities = []  
   }  

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

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


a)PNG 生成方案 Vs. 的区别b)VectorDrawableCompat 是 :

1) APK 大小。对于 a),您最好使用多 apk,这样一个 APK 用于 >=21,一个用于 <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 中使用。

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