VectorDrawable - 它是否适用于Lollipop之前版本的Android?

and*_*per 84 android vector gradle android-vectordrawable

背景

我注意到Android现在支持某种矢量绘图,通过一个名为" VectorDrawable " 的类(以及AnimatedVectorDrawable,BTW).我通过查看Android-Studio上的新功能找到了它.

我不知道这是否会是具有把多个文件分成多个文件夹(年底mdpi,hdpi,xhdpi,等).这将是伟大的,并可能在某些情况下最小化应用程序大小.

问题

我想就这个新课提出几个问题:

  1. 是否可以在较旧的Android版本中使用它,也许可以通过甚至是Google支持库的库?

  2. 我不熟悉它是如何工作的,但Lollipop可以处理SVG文件吗?它可以做任何可以在SVG文件上实现的东西吗?

  3. 除了我发现的文档之外,是否有使用它的示例/教程/视频?

Ami*_*ela 39

2016年3月更新

通过Android支持库23.2.1更新,支持向量Drawables和动画矢量Drawables.(你也可以使用latestone)

请在gradle文件中更新库的版本.

compile 'com.android.support:recyclerview-v7:23.2.1'
Run Code Online (Sandbox Code Playgroud)

Vector drawables允许您使用 XML定义的单个矢量图形替换多个png资源.虽然以前仅限于棒棒堂及更高版本的设备,都VectorDrawableAnimatedVectorDrawable现在可通过两种新的支持库支持向量绘制动画矢量抽拉.app:srcCompat引用矢量drawables的新属性.

使用一些示例示例检查github上的源代码.

v7 appcompat库的更改:

恢复对矢量资产的依赖性,以便不强制使用appcompat库的开发人员VectorDrawable及其关联的构建标志.

  • 关于矢量支持,是不是足以更新gradle插件并在"defaultConfig"中使用"vectorDrawables.useSupportLibrary = true"? (3认同)
  • 上面的`compile`语句暗示项目使用`RecyclerView`,但并非总是如此. (2认同)

小智 12

您可以尝试此支持库.它支持Lollipop中引入的VectorDrawable和AnimatedVectorDrawable,具有完全向后兼容性.

  • 也许不是API 7,但绝对是API 10(Gingerbread),因为它占Android市场的4.1%(https://developer.android.com/about/dashboards/index.html). (4认同)

raz*_*zle 12

更新2:他们在支持库23.4.0中再次启用它:

对于AppCompat用户,我们添加了一个opt-in API,通过AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)重新启用资源支持Vector Drawables(23.2中的行为) - 请记住,这仍然会导致内存使用问题和更新配置实例时出现问题,因此默认情况下禁用它.

立即查看此23.4.0

更新:这不适用于版本23.3.0 .有关详细信息,请单击此处.代理drawable不起作用.然而app:srcCompat,setImageResource()工作.


Vector Drawable支持可从版本23.2及更高版本的支持库获得.但是,要正确使用这些drawable,必须间接引用它们.

第一步骤是磕碰的AppCompat版本.

compile 'com.android.support:appcompat-v7:23.2.0'
Run Code Online (Sandbox Code Playgroud)

第二个启用Vector Drawable支持.如果使用Gradle插件,则为2.0+

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}
Run Code Online (Sandbox Code Playgroud)

除此以外

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

   aaptOptions {  
     additionalParameters "--no-version-vectors"  
   }  
}
Run Code Online (Sandbox Code Playgroud)

第三,参考链接的答案.


Dav*_*and 8

为了补充这里的一些答案:是的,你可以获得对Lollipop之前的VectorDrawables的支持,至少是部分支持.

有多偏?这取决于 - 我已经使这个图表有所帮助(对支持库23.4.0有效 - 至少 - 25.1.0).

VectorDrawable cheatsheet


gnu*_*anu 6

不幸的是,此时VectorDrawable和AnimatedVectorDrawable在支持库中不可用.但是要在Pre-Lollipop版本中使用此功能,您可以使用名为MrVector的非官方后端.

MrVector可以在Github上使用,它将支持Android版本7+.

来自官方自述

要添加MrVector依赖项,请将以下行添加到build.gradle依赖项块中.

compile 'com.telly:mrvector:0.2.0'
Run Code Online (Sandbox Code Playgroud)

要从矢量XML创建drawable,

Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_android);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.