AppCompatDrawableManager.get() 对比 VectorDrawableCompat.create()
AppCompatDrawableManager.get() vs VectorDrawableCompat.create()
我使用的是支持库版本 24.2.1,并已通过 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
启用支持向量
这些关于支持向量的函数有什么区别? 我使用的是 VectorDrawableCompat.create(getResources(), R.drawable.my_vector, null)
。但是,当以编程方式在按钮上设置可绘制对象时,这不会在我的测试设备(Android 4.3)上产生可绘制对象,如下所示:
button.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
使用 AppCompatDrawableManager.get().getDrawable(getActivity(), R.drawable.my_vector);
(包裹在状态列表选择器中)似乎工作正常,尽管我似乎找不到它的文档。
What is the difference in these functions regarding support vectors?
AppCompatResources.getDrawable(...)
将膨胀各种可绘制对象,包括
- 矢量可绘制对象低于 API 21(仅当构建脚本启用了支持矢量可绘制对象时;进一步阅读)
- 主题正确的 AppCompat 可绘制对象
ContextCompat.getDrawable(Context, int)
可获得的任何其他可绘制对象
此方法内部调用 AppCompatDrawableManager.get().getDrawable(Context, int)
,它不是 public API 的一部分。从消费者的角度来看,这两种方法在功能上是相同的。
VectorDrawableCompat.create(...)
只会膨胀矢量绘图(仅当构建脚本启用支持矢量绘图时;进一步阅读)。
But this does not produce a drawable on my test device (Android 4.3)
VectorDrawableCompat.create(...)
将 return null
出错。如果引用的可绘制对象不是矢量可绘制对象,则可能会发生这种情况,如果您没有正确配置构建插件并且为低于 API 21.
的平台生成了 PNG,则可能会发生这种情况
通过更改 app 模块 build.gradle
:
激活低于 API 21 的矢量绘图支持
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
有关详细信息,请参阅 Android Support Library 23.2 博客 post。
I am using support lib version 24.2.1, and have enabled support vectors with AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
此方法不“启用支持向量”。首先,如上所述,您需要在 build.gradle
中启用支持矢量绘图。
之后,此方法基本上启用了可绘制容器内的支持矢量可绘制对象,例如 LayerDrawable
或 StateListDrawable
。
请参阅 AppCompat — Age of the vectors 了解如何滥用它的更多信息。
我使用的是支持库版本 24.2.1,并已通过 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
这些关于支持向量的函数有什么区别? 我使用的是 VectorDrawableCompat.create(getResources(), R.drawable.my_vector, null)
。但是,当以编程方式在按钮上设置可绘制对象时,这不会在我的测试设备(Android 4.3)上产生可绘制对象,如下所示:
button.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
使用 AppCompatDrawableManager.get().getDrawable(getActivity(), R.drawable.my_vector);
(包裹在状态列表选择器中)似乎工作正常,尽管我似乎找不到它的文档。
What is the difference in these functions regarding support vectors?
AppCompatResources.getDrawable(...)
将膨胀各种可绘制对象,包括
- 矢量可绘制对象低于 API 21(仅当构建脚本启用了支持矢量可绘制对象时;进一步阅读)
- 主题正确的 AppCompat 可绘制对象
ContextCompat.getDrawable(Context, int)
可获得的任何其他可绘制对象
此方法内部调用 AppCompatDrawableManager.get().getDrawable(Context, int)
,它不是 public API 的一部分。从消费者的角度来看,这两种方法在功能上是相同的。
VectorDrawableCompat.create(...)
只会膨胀矢量绘图(仅当构建脚本启用支持矢量绘图时;进一步阅读)。
But this does not produce a drawable on my test device (Android 4.3)
VectorDrawableCompat.create(...)
将 return null
出错。如果引用的可绘制对象不是矢量可绘制对象,则可能会发生这种情况,如果您没有正确配置构建插件并且为低于 API 21.
通过更改 app 模块 build.gradle
:
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
有关详细信息,请参阅 Android Support Library 23.2 博客 post。
I am using support lib version 24.2.1, and have enabled support vectors with
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
此方法不“启用支持向量”。首先,如上所述,您需要在 build.gradle
中启用支持矢量绘图。
之后,此方法基本上启用了可绘制容器内的支持矢量可绘制对象,例如 LayerDrawable
或 StateListDrawable
。
请参阅 AppCompat — Age of the vectors 了解如何滥用它的更多信息。