了解Android的VectorDrawable属性

时间:2016-02-28 13:55:09

标签: android android-vectordrawable

我需要帮助理解由XML定义的VectorDrawable的一些属性。

当我使用Android Studio导入新的矢量资产时,它会生成如下内容:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">

    <path 
        android:fillColor="#000000"
        android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z" />
</vector>

默认情况下,width,height,viewportHeight和viewportWidth被设置为某个默认的Material设计值。

因为我们处理的是矢量而不是像素图像。我的问题是:

  • 为什么需要设置尺寸(宽度,高度等)?
  • 如果我需要为多个尺寸使用相同的矢量xml,如何覆盖这个24dp值而不创建多个矢量xml,这当然会破坏整个目的!

3 个答案:

答案 0 :(得分:4)

VectorDrawables可以在以前使用过png的地方使用。如果VectorDrawable没有宽度和高度,你将创建一个全新的问题,如果你没有将VectorDrawable的大小定义为原始xml的一部分,你必须确保每次你都定义它我想用它。

这会使使用VectorDrawable与使用其他drawable有很大不同,例如使用“wrap_content”不起作用,因为你依靠'content'来定义应该是什么大小的东西。这意味着您无法像现在一样用VectorDrawable替换png,这会导致部分应用中断。

如果您想为不同的设备配置设置不同大小的VectorDrawable,可以使用对资源的引用来定义它。

<vector ...
        android:width="@dimen/vector_size"
        android:height="@dimen/vector_size"
        .../>

然后在res / values中定义它:

<resources>
    <dimen name="vector_size">24dp</dimen>
</resources>

然后,您可以在usual way中为不同的设备配置指定vector_size作为不同的值。

如果你想在同一台设备上使用同一个具有多种尺寸的VectorDrawable,那么目前这有点困难,你可能最好创建多个版本。如果这样做,您可以考虑将pathData移动到字符串资源:

<path ...
    android:pathData="@string/vector_path_name"/>

这样,即使您有多个VectorDrawables,它们都引用定义其形状的相同pathData,如果您更改该字符串,您将更新所有版本。

答案 1 :(得分:4)

在xml向量中添加@dimen会出错 错误:错误:宽度(0)和高度(0)不能是

答案 2 :(得分:0)

XML中定义的大小只是drawable的“内在”大小。您可以以任何您想要的尺寸绘制它。如果您打算以多种尺寸绘制相同的矢量,则应为每个尺寸为VectorDrawable充气,并在每个尺寸上调用setBounds(0,0,desiredWidth,desiredHeight)。您可能已经习惯了为多次使用调用setBounds。