android: drawable Sol kenar boşluğu ve / veya dolgu


Yanıtlar:


464

Bahsedildiği gibi cephus android:drawablePadding, düğme yeterince küçükse, metin ile çekilebilir arasındaki dolguyu zorlar.

Büyük düğmeler dışarı atarken zaman kullanabilirsiniz android:drawablePaddingbirlikte android:paddingLeftve android:paddingRightmetin zorlamak ve düğmenin merkezine doğru içe çekilebilirdir için. Sol ve sağ dolguyu ayrı ayrı ayarlayarak düzende çok ayrıntılı ayarlamalar yapabilirsiniz.

Metni ve simgeyi varsayılan olarak olduğundan daha yakına itmek için dolgu kullanan bir örnek düğme:

<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" burada önemli!
IgorGanapolsky

4
bu soru ile ilgili değil, ama android: yerçekimi = "merkez" metni çekilebilir merkezi ile hizalanmış tutacak!
cwhsu

1
Peki hem solda hem de sağda çekmecelerimiz varsa ve sadece sağ çekilebilir ayarlamalıysak ??
nmxprime

Sadece kullanıyorum: android: paddingLeft ve görüntünün konumunu değiştirir. android: drawablePadding görüntü ve metin arasındaki boşluk için kullanılır.
Cesur Cesur

Bu kodun sorunu, passwordToggleDrawablesol dolgu boşluğunun daha büyük olmasına neden olmasıdır, çünkü sadece hedefin sadece çekilebilir olana belirli bir hedefi olamaz.
Meyve

184

TextView hile yapması gereken bir android: drawablePadding özelliğine sahiptir:

android: drawablePadding

Çekilebilir malzemeler ve metin arasındaki dolgu.

"14.5sp" gibi bir birime eklenen bir kayan nokta sayısı olan bir boyut değeri olmalıdır. Kullanılabilir birimler şunlardır: piksel (piksel), dp (yoğunluktan bağımsız pikseller), sp (tercih edilen yazı tipi boyutuna göre ölçeklenmiş pikseller), (inç), mm (milimetre) cinsinden.

Bu ayrıca, bu tür bir değer içeren bir kaynağa ("@ [paket:] türü: ad" biçiminde) veya tema özelliğine ("? [Paket:] [tür:] ad" biçiminde) bir referans olabilir. .

Bu, drawablePadding genel öznitelik kaynak simgesine karşılık gelir.


61

android:drawablePaddingyalnızca düğme 2'yi ezecek kadar küçükse, metin ile çekilebilir arasında bir dolgu boşluğu oluşturur. Düğmeniz birleştirilmiş genişlikten (drawableLeft / drawableRight için) veya yükseklikten (drawableTop / drawableBottom için) daha genişse drawablePadding hiçbir şey yapmaz.

Şu an bununla da mücadele ediyorum. Düğmelerim oldukça geniştir ve simge düğmenin sol kenarında asılıdır ve metin ortada ortalanmıştır. Şimdilik bunu yapmanın tek yolu, tuvalin sol kenarına photoshop ile boş pikseller ekleyerek çekilebilir bir kenarda pişirmek oldu. İdeal değil ve gerçekten tavsiye edilmez. Ama şu an için stop-gap çözümüm, TextView / Button'ı yeniden oluşturmaktan yoksun.


sorunumu açıkladığınız için teşekkürler. Sadece düğme yeterince geniş olduğunda ortaya çıktığını fark
etmedim

Aynı problemim var.
Düğmem

yay çalıştı teşekkürler
dave o grady

43

Evet. aşağıdaki gibi drawablePadding kullanın ,

<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

Çekilebilir kaynaklarınızı oluşturun .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 Inset'i çekilebilir olarak kullanıyorum ve yeni sürüm cihazlar için iyi çalışıyor. Yani SDK 16, 17'de çalışmıyor ama SDK 23'te çalışıyor. Herhangi bir fikir var mı?
Bhavin Chauhan


Güzel cevap ve bunun için oy. Sadece uzun zamandır kafamı karıştıran bir sorunu çözmeme yardım ediyorsun.
Anthonyeef

34

android:drawablePaddingçekilebilir simgeye doldurma vermek için en kolay yoldur ama Beğendiğiniz belirli bir tarafı dolgu veremez paddingRightveya paddingLeftçekilebilir ait bunu içine kazmak zorunda olduğunu ulaşmak icon.To. Eğer uygularsanız Ve paddingLeftya paddingRightkarşı Edittexto zaman izleyebilmektedir dolgu koyacaktır Edittextçekilebilir simgesiyle birlikte.


12

düzenleme metniniz için bir şekil tanımlayın ve bir dolgu verin. Örneğin

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

Bu şekilde tanımlanan dolgu, çekme sol veya sağa dolgu vermenize yardımcı olacaktır ---------------------- Bu şekli EditView'da uygulayın

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

tanımlı şekli arka plan olarak kullanmak EditText'inize drawableLeft için bir stil artı marj verecektir.


12

android: drawablePadding, çekmeceli simgeye dolgu vermenin en kolay yoludur, ancak paddingRight veya padding gibi belirli bir yan dolgu veremezsiniz. Ve Edittext'e paddingLeft veya paddingRight uygularsanız, çekilebilir simgeyle birlikte tüm Edittext'e dolgu yerleştirir.

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

not: layout_width öğesinin wrap_content olması ve paddingLeft paddingRight drawablePadding öğesinin boşluğu kontrol etmek için kullanılması gerekir. Layout_width değerinin simge ve metin arasında boşluk olduğunu belirtirseniz, bir kez layout_width'e belirli bir değer verirseniz, dolgu ölçülür.


9

Cevabımı da yüzüğe atacağım. Bunu programlı olarak yapmak istiyorsanız aşağıdakileri yapabilirsiniz.

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);

Bu, telefonun LTR veya RTL'de olmasına bağlı olarak dolguyu çekilebilir ucun sonuna ekleyecektir.


7

Yerine Buttonkullanımı LinearLayoutile ImageViewve TextViewiçeriden. Gibi ImageViewve TextViewkullanımı alt öğeler android:duplicateParentState="true".


Düğme Arayüzünü yeniden oluşturmak ve onclicklistener'ı () düğme kısmına aktarmak için bir FrameLayout ve bir Button'a (ve kendi LinearLayout içindeki ImageView / TextView) ihtiyacınız olacak
3c71

1
TextView'da zaten drawablePadding varsa neden ek düzen kullanıyorsunuz?
Parinda Rajapaksha

5

Katman listesini kullanmayı düşünmelisiniz

Böyle bir çekilebilir dosya oluşturun, dosyayı ic_calendar.xml olarak adlandırın

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

Düzen dosyası altında,

<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

Düğme için bir dolgu kullanabilirsiniz ve drawablePadding ile oynayabilirsiniz

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

Belirli bir dolgu kullanabilirsiniz çizilebilir koymak android ile bağlıdır, paddingLeft = "10dp" veya android: paddingBottom = "10dp" veya android: paddingRight = "10dp" veya android: paddingTop = "10dp"


2

android:drawableLeft="@drawable/your_icon"Sol tarafta gösterilecek çekmeceyi ayarlamak için kullanabilirsiniz . Çekmeceye dolgu malzemesi koymak için, sırasıyla sol / sağ dolguları ayarlamak için android:paddingLeftveya tuşlarını kullanmalısınız android:paddingRight.

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

1

Çekilebilir kaynak boyutu sabitse, bunu yapabilirsiniz:

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

Burada anahtar şudur:

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

Yani, çekilebilir kaynak artı paddingRight boyutu paddingLeft'dir.

Sonucu bu örnekte görebilirsiniz


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

addressTitleView.setCompoundDrawablePadding();

Bu kod snippet'i soruyu çözebilir, ancak bir açıklama dahil olmak , yayınınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
Rosário Pereira Fernandes

Bu sadece metin görünümü için çalışır, örn. Başlangıç ​​/ bitiş drwables ayarlamaya izin veren düğme
Ixx

1

sadece şunu yeniden yap:

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

için

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.