gpt4 book ai didi

android - AppCompatDrawableManager.get() 与 VectorDrawableCompat.create()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:59:30 28 4
gpt4 key购买 nike

我使用的是支持库版本 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(...) 将在出错时返回 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 中启用支持矢量绘图。

之后,此方法基本上启用可绘制容器内的支持矢量可绘制对象,例如 LayerDrawableStateListDrawable

参见 AppCompat — Age of the vectors有关如何滥用此信息的更多信息。

关于android - AppCompatDrawableManager.get() 与 VectorDrawableCompat.create(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40241018/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com