如何获得一个android:图标的真实颜色显示通过按钮

ryevplcw  于 2023-08-01  发布在  Android
关注(0)|答案(1)|浏览(118)

我使用这个代码:

<Button
                android:id="@+id/play_pause_button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:icon="@drawable/pause"
                android:textAlignment="center"
                style="@style/Widget.Material3.Button.Icon"/>

字符串
下面是我的图标的XML可绘制代码:

<vector android:height="1000dp" android:viewportHeight="48"
    android:viewportWidth="48" android:width="1000dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#0883d9" android:pathData="M20,24H10V8c0,-1.1 0.9,-2 2,-2h6c1.1,0 2,0.9 2,2V24z"/>
    <path android:fillColor="#0370c8" android:pathData="M18,42h-6c-1.1,0 -2,-0.9 -2,-2V24h10v16C20,41.1 19.1,42 18,42z"/>
    <path android:fillColor="#0883d9" android:pathData="M38,24H28V8c0,-1.1 0.9,-2 2,-2h6c1.1,0 2,0.9 2,2V24z"/>
    <path android:fillColor="#0370c8" android:pathData="M36,42h-6c-1.1,0 -2,-0.9 -2,-2V24h10v16C38,41.1 37.1,42 36,42z"/>
</vector>


但我只看到一个白色图标,像这样:


的数据

qq24tv8q

qq24tv8q1#

您看到的问题是由于Material Design 3中Widget.Material3.Button.Icon的默认样式造成的。此样式会将色调应用于图标,这就是图标显示为白色的原因。
要解决这个问题,您可以在按钮的样式中将iconTint属性覆盖为null,以便使用可绘制对象的原始颜色。以下是您的操作方法:
首先,在styles.xml中定义一个新的样式,该样式继承自Widget.Material3.Button.Icon,并覆盖iconTint属性:

<style name="MyButtonStyle" parent="Widget.Material3.Button.Icon">
    <item name="android:iconTint">@null</item>
</style>

字符串
然后,在按钮中使用此样式:

<Button
   android:id="@+id/play_pause_button"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   app:icon="@drawable/pause"
   android:textAlignment="center"
   style="@style/MyButtonStyle"/>


进行此更改后,您的按钮将以其原始颜色显示图标。

相关问题