1

Android Studio 中的矢量 xml:

<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="#FF000000"
    android:pathData="M12,15C7.58,15 4,16.79 4,19V21H20V19C20,16.79 16.42,15 12,15M8,9A4,4 0,0 0,12 13A4,4 0,0 0,16 9M11.5,2C11.2,2 11,2.21 11,2.5V5.5H10V3C10,3 7.75,3.86 7.75,6.75C7.75,6.75 7,6.89 7,8H17C16.95,6.89 16.25,6.75 16.25,6.75C16.25,3.86 14,3 14,3V5.5H13V2.5C13,2.21 12.81,2 12.5,2H11.5Z" />

结果:

在此处输入图像描述

更改24dp96dp,结果:

在此处输入图像描述

Android Studio 中的菜单 xml:

...
<!-- Sperren -->
<TextView
    android:id="@+id/suppress_button"
    style="@style/TextAppearance.MaterialSheetFab.Sheet.Item"
    android:drawableLeft="@drawable/ic_assignment_return"
    android:drawableStart="@drawable/ic_assignment_return"
    android:text="Sperren" />

 <!-- IH-Auftrag -->
 <TextView
    android:id="@+id/setup_maintenance_order_button"
    style="@style/TextAppearance.MaterialSheetFab.Sheet.Item"
    android:drawableLeft="@drawable/ic_ih_auftraege"
    android:drawableStart="@drawable/ic_ih_auftraege"
    android:text="IH-Auftrag" />
    ...

所以我现在的问题是,如何像 svg 通常应该做的那样自动更改大小?

4

1 回答 1

6

我不太确定这是您正在寻找的答案,但无论如何它都会出现:

简而言之:使用ImageViewscaleType="fitXY"设置您想要的大小或创建您自己的子类并设置维度,Drawable如下所述。

ImageView使用相同的矢量可绘制对象,比例类型fitCenter在左侧,fitXY右侧:

图像视图示例

问题的详细描述:

您的问题可能来自这样一个事实,即Drawable假设它具有静态尺寸,许多 Android 组件正在使用实例。
这些组件试图Drawable通过调用Drawable#getIntrinsicHeight()Drawable#getIntrinsicWidth()来获取实际尺寸。这些方法将提供您在VectorDrawable资源中定义的确切数量,分别为高度和宽度。
如果这些尺寸不适合渲染所在矩形的所需尺寸,那么(通常)这些组件会MatrixCanvas渲染之前对Drawable. Drawable不知道它必须被渲染成不同的维度并将向量渲染成Bitmap使用您在资源中定义的维度。在Bitmap准备好矢量内容后,它将被渲染为Canvas使用缩放并且(不足为奇)它变得模糊。

幸运的是,并非所有组件都这样做,例如ImageView能够通过调用 [Drawable#setBounds()]( http://developer.android.com/reference/android/graphics/Drawable来告诉它需要渲染成不同的维度drawable/Drawable.html#setBounds(int , int, int, int)),但前提是比例类型设置为FitXY(我不得不查看ImageView来源才能弄清楚这一点。)
不幸的是,这在某些情况下可能无济于事。您可以从这些 OS 组件创建自己的子类组件,并在Drawable确定正确尺寸时设置尺寸。

于 2016-03-01T21:42:36.527 回答