如何将没有文本的 MaterialButton 中的图标居中?

How to center icon in a MaterialButton which has no text?

我使用的是最新版本的 com.google.android.material:material 库(即 1.1.0-alpha03),并且我有一个 MaterialButton 定义的图标,如下所示:

我希望 MaterialButton 呈现为正方形,图标居中,但 MaterialButton 呈现如下:

如果我将 iconGravity 值更改为 "textStart",则 MaterialButton 呈现如下:

图标的位置略有改进,但图标仍然有点偏离中心。如果我将 insetLeftinsetRightinsetTopinsetBottom 值更改为 0dp,则 MaterialButton 呈现如下:

这是对按钮形状的改进,但图标仍然有点偏离中心。

任何人都知道我是否可以做些进一步的事情来使图标在 MaterialButton 中居中?

找到了。我缺少的属性是 app:iconPadding="0dp".

因此,根据我的实验,创建正方形 MaterialButton 所需的最少属性如下:

<com.google.android.material.button.MaterialButton
    android:layout_width="52dp"
    android:layout_height="52dp"
    android:insetLeft="0dp"
    android:insetTop="0dp"
    android:insetRight="0dp"
    android:insetBottom="0dp"
    app:icon="@drawable/icon_next"
    app:iconGravity="textStart"
    app:iconPadding="0dp" />

这些属性产生一个 MaterialButton 如下:

您的按钮上还有一个 Icon 版本的 material 样式。对于您正在使用的填充按钮,您可以将样式设置为 Widget.MaterialComponents.Button.Icon.

将 iconGravity 更改为 textStart 并将 iconPadding 更改为 0dp

    app:iconPadding="0dp"
    android:padding="0dp"
    app:iconGravity="textStart"

将此样式添加到按钮

<Button style="@style/Widget.App.Button.IconOnly"/>

然后在res/values/styles.xml中添加以下内容

<style name="Widget.App.Button.IconOnly" parent="Widget.MaterialComponents.Button">
    <item name="iconPadding">0dp</item>
    <item name="android:insetTop">0dp</item>
    <item name="android:insetBottom">0dp</item>
    <item name="android:paddingLeft">12dp</item>
    <item name="android:paddingRight">12dp</item>
    <item name="android:minWidth">48dp</item>
    <item name="android:minHeight">48dp</item>
</style>

来源:https://material.io/components/buttons/android

我注意到 app:iconGravity="textStart" 在我将 appcompat 更新到版本 1.4.0 后停止工作。 我现在使用 app:iconGravity="textTop"

使用Widget.Material3.Button.IconButton风格

<com.google.android.material.button.MaterialButton
    style="@style/Widget.Material3.Button.IconButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:icon="@drawable/ic_baseline_power_settings_new_24"
    app:backgroundTint="?android:attr/colorButtonNormal"
    android:layout_gravity="center"
    />