На кнопке текст и нарисованные объекты расположены слишком далеко в центре - PullRequest
1 голос
/ 16 октября 2019

, когда я делаю ширину кнопки в соответствии с родителем, начальный текст и текст для рисования находятся слишком далеко, и они, похоже, не соответствуют настройке android:drawablePadding. Я тоже пробовал с android:gravity="center" и android:textAlignment="center" безрезультатно. Установка некоторых paddingStart/End косвенно влияет на то, насколько близко они находятся друг к другу. Смотрите результат ниже:

match parent width button

Код кнопки:

<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" />

стиль определяет background, textColor, margins, minDimensions, paddings, radiuses, textSize, textAllCaps, radiuses, stateListAnimator, fontPath - так что ничто не должно повлиять на то, что я ищу.

Ответы [ 4 ]

2 голосов
/ 16 октября 2019

Используйте MaterialButton с app:iconGravity="start" и определяйте отступ между значком и текстом с атрибутом app:iconPadding.

Что-то вроде:

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

Это значение может быть отрицательным.

enter image description here

В противном случае вы можете использовать app:iconGravity="textStart".
Здесь разница использования start и textStart в качестве iconGravity.

enter image description here

1 голос
/ 16 октября 2019

Теперь вы можете использовать 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'

Ссылка

0 голосов
/ 16 октября 2019

Попробуйте с этим, должно работать.

<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" />
0 голосов
/ 16 октября 2019

Вы пытались использовать android: textAlignment = "textStart"?

...