android: drawableLeft margin и / или padding - PullRequest
337 голосов
/ 26 июля 2010

Можно ли установить поле или отступ для изображения, которое мы добавили с помощью android:drawableLeft?

Ответы [ 18 ]

424 голосов
/ 13 июля 2011

Как уже упоминалось, cephus android:drawablePadding будет принудительно заполнять текст и рисовать только в том случае, если кнопка достаточно мала.

При размещении кнопок большего размера вы можете использовать android:drawablePadding в сочетании с android:paddingLeft и android:paddingRight для принудительного ввода текста и рисования внутрь по направлению к центру кнопки. Регулируя левый и правый отступы по отдельности, вы можете сделать очень подробные настройки макета.

Вот пример кнопки, которая использует отступы для сближения текста и значка ближе, чем они были бы по умолчанию:

<Button android:text="@string/button_label" 
    android:id="@+id/buttonId"
    android:layout_width="160dip"
    android:layout_height="60dip"
    android:layout_gravity="center"
    android:textSize="13dip"
    android:drawableLeft="@drawable/button_icon"
    android:drawablePadding="2dip"
    android:paddingLeft="30dip"
    android:paddingRight="26dip"
    android:singleLine="true"
    android:gravity="center" />  
168 голосов
/ 26 июля 2010

TextView имеет свойство android: drawablePadding , которое должно помочь:

android: drawablePadding

Заполнение междуdrawables и текст.

Должно быть значением измерения, которое представляет собой число с плавающей запятой, добавляемое с единицей измерения, такой как «14.5sp».Доступные единицы измерения: px (пиксели), dp (пиксели, не зависящие от плотности), sp (масштабированные пиксели на основе предпочтительного размера шрифта), дюймы (дюймы), мм (миллиметры).

Это также может быть ссылкак ресурсу (в форме "@ [package:] type: name") или атрибуту темы (в форме "? [package:] [type:] name"), содержащему значение этого типа.

Это соответствует символу ресурса глобального атрибута drawablePadding.

56 голосов
/ 19 сентября 2010

android:drawablePadding создаст пробел между текстом и рисованием только в том случае, если кнопка достаточно мала, чтобы сложить 2 вместе. Если ваша кнопка шире, чем объединенная ширина (для drawableLeft / drawableRight) или высота (для drawableTop / drawableBottom), тогда drawablePadding ничего не делает.

Я тоже сейчас борюсь с этим. Мои кнопки довольно широкие, значок висит на левом краю кнопки, а текст посередине. Мой единственный способ обойти это сейчас - запекать с полями для рисования, добавляя пустые пиксели к левому краю холста с помощью Photoshop. Не идеально, и не очень рекомендуется. Но это мое временное решение, если не считать перестройки TextView / Button.

39 голосов
/ 16 июня 2017

Да.используйте drawablePadding следующим образом,

<TextView
        android:id="@+id/tvHeader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Settings and Contents"
        android:drawableLeft="@drawable/icon_success"
        android:drawablePadding="10dp" />
32 голосов
/ 21 июля 2015

android:drawablePadding - это самый простой способ добавить отступ для рисованного значка, но вы не можете задать конкретный односторонний отступ, например paddingRight или paddingLeft для рисованного значка. Чтобы добиться этого, вам нужно копаться в нем.И если вы примените paddingLeft или paddingRight к Edittext, тогда он поместит заполнение на весь Edittext вместе с иконкой для рисования.

32 голосов
/ 19 мая 2015

Создайте свои ресурсы для рисования. Xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <inset android:drawable="@drawable/small_m" android:insetLeft="10dp" android:insetTop="10dp" />
    </item>
    <item>
        <inset android:drawable="@drawable/small_p" android:insetLeft="10dp" android:insetTop="10dp" />
    </item>
</selector>
12 голосов
/ 22 сентября 2014

определить форму для вашего текста редактирования и дать ему отступы Например

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <padding
        android:left="5dp"
        android:right="5dp"
    />
    <solid android:color="#F6F6F6" />
    <stroke
        android:width="1px"
        android:color="#C3C3C3" />

    <corners
        android:bottomLeftRadius="1dp"
        android:bottomRightRadius="1dp"
        android:topLeftRadius="1dp"
        android:topRightRadius="1dp" />
</shape>

Заполнение, определенное в этой форме, поможет придать отступу правому или левому краю ---------------------- Примените эту форму на EditView

 <EditText
            android:id="@+id/example"
            android:layout_width="fill_parent"
            android:layout_height="36dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:background="@drawable/shape2"
            android:drawableLeft="@drawable/icon1"
            android:drawablePadding="@dimen/txtDrwblPadding"
            android:ems="10"
         />

Использование этой определенной формы в качестве фона придаст вашему EditText стиль и поле для drawableLeft.

7 голосов
/ 14 августа 2018
<TextView
    android:layout_width="wrap_content"
    android:layout_height="32dp"
    android:background="@drawable/a"
    android:drawableLeft="@drawable/concern_black"
    android:gravity="center"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:drawablePadding="10dp"
    android:text="text"/>

примечание: layout_width должно быть wrap_content и использовать paddingLeft paddingRight drawablePadding для контроля зазора. Если вы укажете значение layout_width, в котором будет разрыв между значком и текстом, я думаю, что однажды передайте layout_width заданное значение, отступ будет измеряться.

7 голосов
/ 13 февраля 2013

Вместо Button используйте LinearLayout с ImageView и TextView внутри. В дочерних элементах, таких как ImageView и TextView, используйте android:duplicateParentState="true".

5 голосов
/ 13 марта 2018

Я тоже брошу свой ответ на ринг.Если вы хотите сделать это программно, вы можете сделать следующее:

final Drawable drawable = ContextCompat.getDrawable(getContext(), R.drawable.somedrawable);
final boolean isLTR = ViewCompat.LAYOUT_DIRECTION_LTR == ViewCompat.getLayoutDirection(this);
final int iconInsetPadding = getResources().getDimensionPixelSize(R.dimen.icon_padding);

final Drawable insetDrawable = new InsetDrawable(drawable, isLTR ? 0 : iconInsetPadding, 0, isLTR ? iconInsetPadding : 0, 0);

Это добавит заполнение к концу рисованного элемента, где конец будет означать влево / вправо в зависимости от того, находится ли телефон в LTR или RTL.1004 *

...