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" />
结果:
将24dp
更改为96dp
,结果:
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一样自动更改大小?
答案 0 :(得分:4)
我不太确定这是你正在寻找的答案,但无论如何它仍然存在:
简而言之:与ImageView
一起使用scaleType="fitXY"
并设置您想要的尺寸或创建您自己的子类并在Drawable
上设置尺寸,如下所述
ImageView
具有相同的矢量绘图,左侧为fitCenter
,右侧为fitXY
:
问题的详细说明:
您的问题可能来自许多Android组件使用Drawable
实例,假设它具有静态尺寸
这些组件正在尝试通过调用Drawable#getIntrinsicHeight()和Drawable#getIntrinsicWidth()来获取Drawable
的实际维度。这些方法将分别使用您在VectorDrawable
资源中定义的确切数量作为高度和宽度
如果这些尺寸不符合渲染所需的矩形所需的尺寸(通常),这些组件在渲染Matrix
之前会在Canvas
上应用缩放Drawable
。 Drawable
并不知道必须将其渲染到不同的维度,并将该向量渲染为Bitmap
,其中包含您在资源中定义的维度。在Bitmap
准备好使用矢量内容后,它将使用缩放渲染到Canvas
,并且(毫不奇怪)它会变得模糊。
并非所有组件都幸运地执行此操作,例如ImageView
能够通过调用[Drawable#setBounds()]({{3}告诉Drawable
需要将其呈现为不同的维度。 }},int,int,int)),但仅当比例类型设置为http://developer.android.com/reference/android/graphics/drawable/Drawable.html#setBounds(int时。 (我不得不偷看ImageView
来源来解决这个问题。)
不幸的是,在某些情况下这可能没有帮助。您可以从这些OS组件创建自己的子类组件,并在找出正确的尺寸时在Drawable
上设置尺寸。