- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用的是支持库版本 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(...)
将膨胀各种可绘制对象,包括
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(...)
将在出错时返回 null
。如果引用的可绘制对象不是矢量可绘制对象,则可能会发生这种情况,如果您没有正确配置构建插件并且为 API 21 以下的平台生成了 PNG,则可能会发生这种情况。
通过更改app 模块 build.gradle
激活低于 API 21 的矢量绘图支持:
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
参见 Android Support Library 23.2博客文章以获取更多信息。
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有关如何滥用此信息的更多信息。
关于android - AppCompatDrawableManager.get() 与 VectorDrawableCompat.create(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40241018/
我使用的是支持库版本 24.2.1,并通过 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 启用了支持向量 这些关于支持向量的
我是一名优秀的程序员,十分优秀!