2010-07-26 5 views

ответ

144

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

андроида: drawablePadding

обивке между и вводимого коэффициента текста.

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

Это также может быть ссылка на ресурс (в виде «@ [пакет:] тип: имя») или атрибут тема (в виде «? [Пакет:] [Тип:] Имя») содержащий значение этого типа.

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

49

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

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

+0

спасибо за объяснения моей проблемы. Я не понял, что это вызвано только тогда, когда кнопка достаточно широкая. –

368

Как указано в кефе, 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" /> 
+11

android: paddingLeft = "30dip" android: paddingRight = "26dip" являются ключевыми здесь! –

+2

это не связано с вопросом, но андроид: gravity = "center" сохранит текст, выровненный с центром вытягиваемого! – cwhsu

+0

Что делать, если у нас есть чертежи как слева, так и справа, и нужно только отрегулировать правильное рисование ?? – nmxprime

6

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

+0

Вам понадобится FrameLayout и кнопка (и ImageView/TextView внутри собственного LinearLayout), чтобы воспроизвести пользовательский интерфейс Button и перенести onclicklistener() на часть кнопки. – 3c71

+0

Зачем использовать дополнительный макет, если у вас уже есть drawablePadding в TextView. –

-3

Пытается использовать отрицательные отступы

Как:

android:paddingLeft="-8dp" 
11

определить форму вашего EditText и дать ему отступы Для примера

<?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> 

отступы, определенные в этой форме будет помощь в предоставлении прокладки для drawableleft или right ---------------------- Применить эту форму на 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.

+0

его хорошее решение, спасибо! –

24

Сделайте вытяжке resources.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> 
+0

Хорошее решение для этого. –

+0

Спасибо вам, парень! Это решение позволяет мне тратить много времени. – emaleavil

+2

@ The Finest Artist У меня есть встроенная вставка, и она отлично работает для более новых версий. Я имею в виду, что он не работает в SDK 16, 17, а работает в SDK 23. Есть ли идеи? –

29

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

2

Вы можете использовать android:drawableLeft="@drawable/your_icon", чтобы установить выпадающий, который будет показан слева. Чтобы установить прописку для рисования, вы должны использовать android:paddingLeft или android:paddingRight для установки соответственно левой и правой прокладки.

android:paddingRight="10dp" 
android:paddingLeft="20dp" 
android:drawableRight="@drawable/ic_app_manager" 
2

Вы можете использовать отступы для кнопки, и вы можете играть с drawablePadding

<Button 
    style="@style/botonesMenu" 
    android:padding="15dp" 
    android:drawablePadding="-15dp" 
    android:text="@string/actualizarBD" 
    android:textAlignment="gravity" 
    android:gravity="center" 
    android:layout_row="1" 
    android:layout_column="0" 
    android:drawableTop="@drawable/actualizar" 
    android:id="@+id/btnActualizar" 
    android:onClick="actualizarBD" /> 

вы можете использовать специальные отступы зависят, где поставить вытяжку, с андроидом: paddingLeft = «10dp» или андроид : paddingBottom = "10dp" или андроид: paddingRight = "10dp" или андроид: paddingTop = "10dp"

0

Если размер вытяжки Ресурса фиксирован, вы можете сделать так:

<Button 
    android:background="@drawable/rounded_button_green" 
    style="?android:attr/selectableItemBackground" 
    android:layout_height="wrap_content" 
    app:layout_widthPercent="70%" 
    android:drawableRight="@drawable/ic_clear_black_24dp" 
    android:paddingRight="10dp" 
    android:paddingLeft="34dp" 
    tools:text="example" /> 

Ключевым моментом здесь является то, что:

android:drawableRight="@drawable/ic_clear_black_24dp" 
    android:paddingRight="10dp" 
    android:paddingLeft="34dp" 

То есть, размер вытяжке ресурса плюс paddingRight является paddingLeft.

You can see the result in this example

13

Да. использовать 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" /> 
3

Вы должны рассмотреть возможность использования слоя-лист

Создать Drawable файл, как это, назовите его ic_calendar.XML

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="@android:color/transparent"/> 
    </shape> 
</item> 
<item android:right="10dp"> 
    <bitmap android:gravity="center_vertical|left" 
     android:src="@drawable/ic_calendar_16dp" 
     android:tint="@color/red" 
     /> 
</item> 
</layer-list> 

Под файл макета,

<TextView 
     android:id="@+id/tvDate" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:drawableLeft="@drawable/ic_calendar" 
     android:textColor="@color/colorGrey" 
     android:textSize="14sp" 
    /> 
0
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null); 

addressTitleView.setCompoundDrawablePadding(); 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего после. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. –

 Смежные вопросы

  • Нет связанных вопросов^_^