我在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
答案 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文件的一部分。
启用上述标志,可以进行以下操作:
app:srcCompat="@drawable/some_vector_drawable"
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
对象的问题(我还没有遇到过)。