Android AppCompativeDrawableManager.get()与VectorDrawableCompatit.create()的比较

Android AppCompativeDrawableManager.get()与VectorDrawableCompatit.create()的比较,android,android-support-library,android-vectordrawable,Android,Android Support Library,Android Vectordrawable,我使用的是support lib版本24.2.1,并且已经启用了带有AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)的支持向量 这些函数在支持向量方面有什么不同?我使用的是VectorDrawableCompat.create(getResources(),R.drawable.my_vector,null)。但在我的测试设备(Android 4.3)上,当以编程方式在按钮上设置可绘制时,这不会生成可绘制的,如下所示: but

我使用的是support lib版本24.2.1,并且已经启用了带有
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)的支持向量

这些函数在支持向量方面有什么不同?我使用的是
VectorDrawableCompat.create(getResources(),R.drawable.my_vector,null)
。但在我的测试设备(Android 4.3)上,当以编程方式在按钮上设置可绘制时,这不会生成可绘制的,如下所示:

button.setCompoundDrawableSwithinInstincBounds(图标,null,null,null)


使用appcompatidDrawableManager.get().getDrawable(getActivity(),R.drawable.my_vector)(包装在状态列表选择器中)似乎工作正常,尽管我似乎找不到它的文档

关于支持向量,这些函数有什么不同

AppCompatitDrawable.getDrawable(…)
将为各种可提取物品充气,包括

  • API 21以下的矢量绘图(仅当构建脚本启用了支持矢量绘图;请进一步阅读)
  • 主题恰当的AppCompat抽绳
  • 通过
    ContextCompat.getDrawable(Context,int)

此方法在内部调用
AppCompatidDrawableManager.get().getDrawable(Context,int)
,它不是公共API的一部分。从消费者的角度来看,这两种方法在功能上是相同的

VectorDrawableCompat.create(…)
只会膨胀向量可抽取内容(仅当构建脚本启用了支持向量可抽取内容时;请进一步阅读)

但这并不能在我的测试设备(Android 4.3)上生成一个可绘制的

VectorDrawableCompat.create(…)
出错时将返回
null
。如果引用的drawable不是矢量drawable,则会发生这种情况,而如果您没有正确配置构建插件,并且为API 21以下的平台生成PNG,则会发生这种情况

通过更改应用程序模块
build.gradle
,激活API 21下的矢量绘图支持:

// Gradle Plugin 2.0+  
android {  
  defaultConfig {  
    vectorDrawables.useSupportLibrary = true  
  }  
}  
有关更多信息,请参阅博客文章

我使用的是support lib版本24.2.1,并已通过
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

此方法不“启用支持向量”。首先,如上所述,您需要在
build.gradle
中启用支持向量绘图功能

在此之后,此方法基本上在可绘制容器中启用支持向量可绘制,如
LayerDrawable
StateListDrawable


有关如何滥用此功能的更多信息,请参阅。

AppCompatirDrawableManager
处于隐藏状态,请使用
AppCompatirResources\getDrawable
instead@pskink
AppCompatResources.getDrawable(…)
24.x.x中介绍的是指向
AppCompatDrawableManager.get().getDrawable(…)的公共API快捷方式
可以更快地提供。太好了,好吧,这样更有意义。我设置了gradle标志,但实际上我认为我的错误是将向量包装在一个状态列表中,该状态列表可用于
setCompoundDrawablesWithIntrinsicBounds()
。我现在在4.3上使用的是直向向量和
VectorCompat。创建
是的,在XML属性中使用复合绘图的包装器,在
VectorDrawableCompat中使用未包装的向量。创建
。哇,很幸运你这么说,谢谢,值得添加到答案中。我让它运行,但没有包装,直到我重新安装,它没有工作。如果应用程序能够至少创建一次向量,它似乎会以某种方式保持向量不变,因此,如果进行实验,最好重新安装/清除数据