在按钮上,文本和可绘制对象在居中时距离太远

On a button, text and drawable are too far away when centered

当我使按钮宽度与父级匹配时,可绘制的开始和文本距离太远,而且它们似乎不符合 android:drawablePadding 设置。我也尝试过 android:gravity="center"android:textAlignment="center" 无济于事。设置一些 paddingStart/End 会间接影响它们之间的距离。 查看以下结果:

按钮代码:

<Button
            style="@style/ActionButton.Primary.Light.Large"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="0dp"
            android:drawableLeft="@drawable/ic_filter_and_sort_white"
            android:drawablePadding="0dp"
            android:textAlignment="center"
            android:text="Apply filters"
            app:layout_constraintBottom_toTopOf="@id/someViewBelow"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/someViewAbove" />

样式定义backgroundtextColormarginsminDimensionspaddingsradiusestextSizetextAllCapsradiusesstateListAnimatorfontPath - 所以没有什么会影响我正在寻找的东西。

您是否尝试使用 android:textAlignment="textStart"?

使用 MaterialButtonapp:iconGravity="start" 并使用 app:iconPadding 属性定义图标和文本之间的填充。

类似于:

    <com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.Icon"
        app:icon="@drawable/...."
        app:iconGravity="start"
        app:iconPadding="..."

这个值可以是负数。

否则你可以使用app:iconGravity="textStart".
这里使用starttextStart的区别为iconGravity

试试这个,应该可以。

<Button
        style="@style/ActionButton.Primary.Light.Large"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="0dp"
        android:drawableLeft="@drawable/ic_filter_and_sort_white"
        android:drawablePadding="5dp"
        android:textAlignment="textStart"
        android:layout_gravity="start"
        android:text="Apply filters"
        app:layout_constraintBottom_toTopOf="@id/someViewBelow"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/someViewAbove" />

您现在可以使用 MaterialButton 来设置图标重力 ex:app:iconGravity="textStart"

 <com.google.android.material.button.MaterialButton
        android:layout_width="0dp"
        android:layout_height="56dp"
        android:layout_margin="16dp"
        android:gravity="center"
        android:textAllCaps="true"
        app:backgroundTint="#fc0"
        app:icon="@drawable/ic_filter_and_sort_white"
        app:iconGravity="textStart"
        app:iconPadding="10dp"
        app:iconTint="#f00"
        app:layout_constraintBottom_toTopOf="@id/someViewBelow"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/someViewAbove"
        tools:text="Download Pdf" />

添加依赖implementation 'com.google.android.material:material:1.1.0-alpha10'

Reference