我需要帮助理解由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>

默认情况下,“宽度”、“高度”、“viewportheight”和“viewportwidth”设置为某些默认材质设计值。
因为我们处理的是矢量而不是像素图像。我的问题是:
为什么需要设置大小(宽度、高度等)?
如果我需要对多个大小使用同一个向量xml,那么如何在不创建多个向量xml的情况下重写这个24dp值,这当然会破坏整个目的!

最佳答案

VectorDrawables可以用于以前使用PNG的地方。如果vectorDrawable没有宽度和高度,则会产生一个全新的问题;如果没有将vectorDrawable的大小定义为原始XML的一部分,则必须确保每次要使用它时都定义了它。
这将使使用vectorDrawable与使用其他Drawable大不相同,例如使用“wrap_content”将不起作用,因为您依赖“content”来定义事物的大小。这意味着你不能像现在这样用矢量绘图替换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指定为不同的值。
如果你想在同一个设备上使用同一个矢量可绘制的多个尺寸,那现在就比较困难了,你最好创建多个版本。如果执行此操作,可以考虑将PathData移动到字符串资源:
<path ...
    android:pathData="@string/vector_path_name"/>

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

07-26 07:06