wake-up-neo.net

android: drawableLeft margin und/oder padding

Ist es möglich, den Rand oder das Auffüllen für das Bild festzulegen, das wir mit dem Android:drawableLeft hinzugefügt haben?

317
androidNewbies

Wie bereits in Cephus erwähnt, wird Android:drawablePadding nur dann aufgefüllt, wenn der Button klein genug ist.

Bei der Anordnung größerer Schaltflächen können Sie Android:drawablePadding in Verbindung mit Android:paddingLeft und Android:paddingRight verwenden, um den Text nach innen und nach innen in die Mitte der Schaltfläche zu zeichnen. Durch das separate Anpassen der linken und rechten Polsterung können Sie sehr detaillierte Einstellungen am Layout vornehmen.

Im Folgenden finden Sie eine Beispielschaltfläche, die durch Auffüllen den Text und das Symbol näher zusammenstoßen als standardmäßig:

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

TextView verfügt über eine Android: drawablePadding -Eigenschaft, die den Trick erfüllen sollte:

Android: drawablePadding

Die Auffüllung zwischen den Zeichenelementen und dem Text.

Muss ein Dimensionswert sein, bei dem es sich um eine Fließkommazahl handelt mit einer Einheit wie "14.5sp". Verfügbare Einheiten sind: px (Pixel), dp (dichteunabhängige Pixel), sp (skalierte Pixel basierend auf der bevorzugten Schriftgröße), in (Zoll), mm (Millimeter).

Dies kann auch ein Verweis auf eine Ressource (in der Form "@ [Package:] type: name") oder ein Designattribut (in der Form "? [Package:] [type:] name") sein. einen Wert dieses Typs enthalten.

Dies entspricht dem globalen Attributressourcensymbol drawablePadding.

166
Cheryl Simon

Android:drawablePadding erstellt nur dann eine Auffülllücke zwischen Text und Zeichen, wenn die Schaltfläche klein genug ist, um die 2 zusammenzuquetschen. Wenn Ihre Schaltfläche breiter als die kombinierte Breite (für drawableLeft/drawableRight) oder die Höhe (für drawableTop/drawableBottom) ist, führt drawablePadding nichts aus.

Ich kämpfe jetzt auch damit. Meine Schaltflächen sind ziemlich breit und das Symbol hängt am linken Rand der Schaltfläche, und der Text wird in der Mitte zentriert. Meine einzige Möglichkeit, dies zu umgehen, war bisher, einen Rand des Zeichnungsbereichs zu backen, indem leere Pixel mit Photoshop am linken Rand der Leinwand hinzugefügt wurden. Nicht ideal und auch nicht wirklich zu empfehlen. Aber das ist jetzt meine Stop-gap-Lösung, nur TextView/Button neu zu erstellen.

56
cephus

Ja. drawablePadding wie folgt verwenden,

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

Android:drawablePadding ist der einfachste Weg, um ein Zeichen-Symbol mit Auffüllungen zu versehen, aber Sie können keine bestimmte Seitenauffüllung wie paddingRight oder paddingLeft von Zeichen-Symbolen geben Wenn Sie paddingLeft oder paddingRight auf Edittext anwenden, wird der gesamte Edittext -Einsatz zusammen mit dem Zeichenelement aufgefüllt.

32
Bhargav Pandit

Machen Sie Ihre zeichnungsfähigen Ressourcen.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>
31

definieren Sie eine Form für Ihren Edittext und geben Sie eine Auffüllung ein Zum Beispiel

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

Die in dieser Form definierte Polsterung hilft, die Polsterung nach rechts oder nach rechts darzustellen ---------------------- Wenden Sie diese Form in EditView an

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

wenn Sie diese definierte Form als Hintergrund verwenden, erhält Ihr EditText einen Stil plus Rand für drawableLeft.

12
Umesh N

Anstelle von Button verwenden Sie LinearLayout mit ImageView und TextView. In untergeordneten Elementen wie ImageView und TextView verwenden Sie Android:duplicateParentState="true".

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

anmerkung: layout_width muss wrap_content sein und paddingLeft paddingRight drawablePadding verwenden, um die Lücke zu steuern. Wenn Sie den Wert für layout_width angeben, wird die Lücke zwischen Symbol und Text liegen, denke ich, sobald der Wert für layout_width einen bestimmten Wert angibt, wird der Abstand gemessen.

7
王良海

Sie können eine Auffüllung für die Schaltfläche verwenden und mit drawablePadding spielen 

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

sie können eine bestimmte Polsterung verwenden, wo sich Ihre Zeichnung befindet, mit Android: paddingLeft = "10dp" oder Android: paddingBottom = "10dp" oder Android: paddingRight = "10dp" oder Android: paddingTop = "10dp"

4
Carolina

Ich werde meine Antwort auch in den Ring werfen. Wenn Sie dies programmgesteuert ausführen möchten, können Sie Folgendes tun.

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

Dadurch wird die Auffüllung am Ende des Zeichenbereichs hinzugefügt, wobei Ende links/rechts bedeutet, je nachdem, ob sich das Telefon in LTR oder RTL befindet.

3
Daniel Ochoa

Sie sollten die Layer-Liste verwenden

Erstellen Sie eine gezeichnete Datei wie diese und nennen Sie sie 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>

Unter Layoutdatei

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

Android: drawablePadding ist der einfachste Weg, um dem Zeichen-Symbol eine Polsterung zu geben. Sie können jedoch keine spezifischen Polsterungen für eine Seite wie paddingRight oder paddingLinks des Zeichen-Symbols festlegen. Und wenn Sie paddingLeft oder paddingRight auf Edittext anwenden, wird der gesamte Edittext mit dem Zeichen-Symbol aufgefüllt.

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

Mit Android:drawableLeft="@drawable/your_icon" können Sie festlegen, dass die Zeichenfläche auf der linken Seite angezeigt wird. Um eine Auffüllung für das Drawable festzulegen, verwenden Sie Android:paddingLeft oder Android:paddingRight, um die linke/rechte Auffüllung festzulegen.

Android:paddingRight="10dp"
Android:paddingLeft="20dp"
Android:drawableRight="@drawable/ic_app_manager"
2
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);

addressTitleView.setCompoundDrawablePadding();
0

Wenn die Größe der zu zeichnenden Ressource festgelegt ist, können Sie Folgendes tun: 

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

Der Schlüssel hier ist das:

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

Das heißt, die Größe der zu zeichnenden Ressource plus paddingRight ist die paddingLeft.

Sie können das Ergebnis in diesem Beispiel sehen

0
user3344964

nur remake von:

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

zu

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

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

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

        </shape>
    </item>

</layer-list>
0