web-dev-qa-db-ja.com

アンドロイド:drawableLeftマージンやパディング

Android:drawableLeftで追加した画像に余白や余白を設定することは可能ですか?

334
androidNewbies

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

TextViewには、 Android:drawablePadding プロパティがあります。

Android:drawablePadding

ドロウアブルとテキストの間の余白。

ディメンション値でなければなりません。これは、 "14.5sp"などの単位が追加された浮動小数点数です。使用可能な単位は、px(ピクセル)、dp(密度に依存しないピクセル)、sp(優先フォントサイズに基づいて拡大/縮小されたピクセル)、インチ(インチ)、mm(ミリメートル)です。

これは、この型の値を含むリソース( "@ [package:] type:name"形式)またはテーマ属性( "?[package:] [type:] name"形式)への参照である場合もあります。 。

これはグローバル属性リソースシンボルdrawablePaddingに対応します。

168
Cheryl Simon

Android:drawablePaddingは、ボタンが2つを押しつぶすのに十分なほど小さい場合にのみ、テキストとドロウアブルの間にパディングギャップを作成します。あなたのボタンが結合された幅(drawableLeft/drawableRightの場合)または高さ(drawableTop/drawableBottomの場合)よりも広い場合、drawablePaddingは何もしません。

私は今もこれに苦労しています。私のボタンはかなり幅が広く、アイコンはボタンの左端にぶら下がっていて、テキストは中央に集中しています。今のところこれを回避するための私の唯一の方法は、フォトショップでキャンバスの左端に空白のピクセルを追加することによって、ドロウアブルに余白を焼き付けることです。理想的ではないし、実際にもお勧めできません。しかし、それは今のところ私のストップギャップソリューションで、TextView/Buttonを再構築することにはなりません。

56
cephus

はい。次のように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" />
39

あなたのdrawable 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>
32

Android:drawablePaddingは描画可能アイコンにパディングを付ける最も簡単な方法ですが、paddingRightpaddingLeftのような特定の片側パディングを与えることはできません。そしてpaddingLeftまたはpaddingRightEdittextに適用すると、描画可能なアイコンとともにEdittext全体にパディングが配置されます。

32
Bhargav Thanki

あなたの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へのスタイルとマージンを与えます。

12
Umesh N

Buttonの代わりに、LinearLayoutImageViewを内側に入れてTextViewを使用してください。 ImageViewTextViewなどの子項目では、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"/>

note:layout_widthはwrap_contentである必要があり、ギャップを制御するためにpaddingLeft paddingRight drawablePaddingを使用する必要があります。あなたがlayout_widthの値を指定すると、アイコンとテキストの間にギャップがあるでしょう、私は一度layout_widthに指定の値を与えると、パディングが測定されると思う。

7
王良海

私は自分の答えを輪にします。プログラム的にこれを実行したい場合は、次の操作を実行できます。

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のどちらであるかに応じて、endableがend/leftを意味するところで、ドロウアブルの最後にパディングを追加します。

5
Daniel Ochoa

あなたはボタンにパディングを使うことができ、あなたは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" />

android:paddingLeft = "10dp"またはAndroid:paddingBottom = "10dp"またはAndroid:paddingRight = "10dp"またはAndroid:paddingRight = "10dp"またはAndroid:paddingTop = "10dp"で、描画可能な場所に応じて特定のパディングを使用できます

4
Carolina

Layer-listの使用を検討するべきです

このような描画可能ファイルを作成し、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" 
    />
3
RayChongJH

Android:drawableLeft="@drawable/your_icon"を使用して、ドロウアブルを左側に表示するように設定できます。ドロウアブルのパディングを設定するためには、それぞれ左右のパディングを設定するためにAndroid:paddingLeftまたはAndroid:paddingRightを使うべきです。

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

描画可能リソースのサイズが決まっている場合は、次のようにします。

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

つまり、drawableリソースにpaddingRightを加えたサイズがpaddingLeftです。

この例で結果を見ることができます

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

addressTitleView.setCompoundDrawablePadding();
0

ちょうどから作り直す:

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

Android:drawablePaddingは、描画可能アイコンにパディングを付ける最も簡単な方法ですが、paddingRightやdrawdingアイコンのpaddingLeftのような特定の片側パディングを指定することはできません。また、paddingLeftまたはpaddingRightをEdittextに適用すると、描画可能なアイコンとともに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"/>
0
Sekhon123