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

时间:2019-02-15 16:10:10

标签: android material-components material-components-android

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

我希望将MaterialButton渲染为一个正方形,图标居中,但是MaterialButton的渲染如下:

MaterialButton with iconGravity value of start

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

MaterialButton with iconGravity value of textStart

这对图标的位置略有改善,但是图标仍然偏离中心一点。如果将insetLeftinsetRightinsetTopinsetBottom的值更改为0dp,则MaterialButton的呈现方式如下:

enter image description here

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

有人知道我还可以做些什么来将图标放在MaterialButton中吗?

4 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:7)

找到了。我缺少的属性是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,如下所示:

MaterialButton with square shape and centred icon

答案 2 :(得分:1)

将此样式添加到按钮

<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/develop/android/components/buttons

答案 3 :(得分:0)

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