android: dravableLeft margin та / або padding


Відповіді:


464

Як згадується цефус 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" />  

21
android: paddingLeft = "30dip" android: paddingRight = "26dip" тут ключові!
ІгорГанапольський

4
це не пов’язано з питанням, але андроїд: gravity = "центр" буде тримати текст урівні з центром малювання!
cwhsu

1
Що робити, якщо у нас є малюнки як зліва, так і справа, і ми повинні лише налаштувати правий рисунок ??
nmxprime

Я використовую лише: android: paddingLeft, і це змінює положення зображення. android: dravablePadding використовується для простору між зображенням і текстом.
Хоробрий

Проблема цього коду полягає в тому, що він призводить до того, що passwordToggleDrawableлівий проміжок в підкладці стає більшим, оскільки він не може задати лише цілі, які залишаються лише для малювання.
Фрукти

184

У TextView є властивість android: dravablePadding, яка повинна зробити трюк:

android: dravablePadding

Прокладка між малюнком і текстом.

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

Це також може бути посилання на ресурс (у формі "@ [пакет:] тип: ім'я") або атрибут теми (у формі "? [Пакет:] [тип:] ім'я"), що містить значення цього типу .

Це відповідає глобальному символу ресурсу атрибута dravablePadding.


61

android:drawablePaddingстворить пробіл між текстом і малюнком лише у тому випадку, якщо кнопка достатньо маленька, щоб склеїти два разом. Якщо ваша кнопка ширша за комбіновану ширину (для dravableLeft / drawableRight) або висоту (для dravableTop / dravableBottom), то dravablePadding нічого не робить.

Я борюся з цим і зараз. Мої кнопки досить широкі, а значок висить на лівому краю кнопки, а текст - по центру. На даний момент єдиним способом обійти це було випікати з полями на малюнку, додавши порожні пікселі до лівого краю полотна за допомогою фотошопу. Не ідеально, і не дуже рекомендується. Але це моє рішення про затримку розриву на даний момент, окрім відновлення TextView / Button.


дякую за пояснення моєї проблеми. Я не зрозумів, що це викликано лише тоді, коли кнопка досить широка
peter.bartos

У мене така ж проблема. Моя кнопка широка, тому малюнок не наближається до тексту
Мілад Фаридня

так, це спрацювало спасибі
Дейв o grady

43

Так. використовувати DravablePadding наступним чином,

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

37

Створіть свої ресурси .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>

2
@ The Finest Artist У мене є вкладка для малювання, і вона працює чудово для пристроїв новішої версії. Я маю на увазі, що вона не працює в SDK 16, 17, але працює в SDK 23. Чи є ідея?
Бхавін Чаухан


Приємна відповідь і підтримка за це. Ви просто допомагаєте мені вирішити проблему, яка мене тривалий час бентежила.
Антонієф

34

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


12

визначте форму для свого редакційного тексту та надайте йому замітку для прикладу

<?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 деякий стиль плюс поле для DravableLeft.


12

android: dravablePadding - це найпростіший спосіб надати набивання малювальному значку, але ви не можете надати певну сторону, наприклад paddingRight або paddingLeft of Dravable icon. І якщо ви застосуєте paddingLeft або paddingRight до Edittext, він помістить padding до всього Edittext разом із значком, що малюється.

<TextView android:layout_width="match_parent"
    android:padding="5sp"
    android:id="@+id/date"
    android:gravity="center|start"
    android:drawableEnd="@drawable/ic_calendar"
    android:background="@drawable/edit_background"
    android:hint="Not Selected"
    android:drawablePadding="10sp"
    android:paddingStart="10sp"
    android:paddingEnd="10sp"
    android:textColor="@color/black"
    android:layout_height="wrap_content"/>

Ви повинні використовувати "dp"
Марк Пазон

11
<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 заданому значенню, вимірювання буде заміряти.


9

Я також кину свою відповідь на ринг. Якщо ви хочете зробити це програмно, ви можете зробити наступне.

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.


7

Замість Buttonвикористання LinearLayoutз ImageViewі TextViewвсередині. У дочірніх предметах подобається ImageViewі TextViewкористується android:duplicateParentState="true".


Насправді вам знадобляться FrameLayout та кнопка (та ImageView / TextView всередині їх власного LinearLayout), щоб відтворити інтерфейс кнопки та перенести onclicklistener () на частину кнопки
3c71,

1
Навіщо використовувати додатковий макет, якщо у вас вже є DravablePadding у TextView.
Парінда Раджапакша

5

Слід розглянути можливість використання списку шарів

Створіть такий файл, який можна створити, назвіть його як 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" 
    />

4

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

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

Ви можете використовувати певну підкладку, залежно від того, куди поставити ваш малюнок, з Android: paddingLeft = "10dp" або android: paddingBottom = "10dp" або android: paddingRight = "10dp" або android: paddingTop = "10dp"


2

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

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

1

Якщо розмір рисувальної ресурсу фіксований, ви можете зробити так:

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

Ви можете побачити результат на цьому прикладі


1
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);

addressTitleView.setCompoundDrawablePadding();

Хоча цей фрагмент коду може вирішити питання, зокрема пояснення дійсно допомагає покращити якість вашої публікації. Пам’ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
Розаріо Перейра Фернандес

Це працює лише для перегляду тексту, не, наприклад, кнопки, яка також дозволяє встановити початковий / кінцевий сировини
Ixx,

1

просто переробити з:

<?xml version="1.0" encoding="utf-8"?>
<shape
        xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="40dp"/>

    <solid android:color="@android:color/white"/>

</shape>

до

<layer-list
        xmlns:android="http://schemas.android.com/apk/res/android">
    <item
            android:right="@dimen/_2dp"
            android:left="@dimen/_2dp"
            android:bottom="@dimen/_2dp"
            android:top="@dimen/_2dp"
            >
        <shape
                xmlns:android="http://schemas.android.com/apk/res/android">

            <corners android:radius="40dp"/>

            <solid android:color="@android:color/white"/>

        </shape>
    </item>

</layer-list>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.