android:drawableLeft边距和/或填充

and*_*ies 354 android android-layout android-drawable

是否可以为我们添加的图像设置边距或填充android:drawableLeft

Jor*_*dan 440

如上所述的cephus android:drawablePadding只会在按钮足够小的情况下强制填充文本和drawable之间的填充.

布置较大的按钮时,您可以android:drawablePadding与文本一起使用android:paddingLeftandroid: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" />  
Run Code Online (Sandbox Code Playgroud)

  • android:paddingLeft ="30dip"android:paddingRight ="26dip"是关键! (20认同)
  • 这与问题无关,但android:gravity ="center"会保持文本与drawable的中心对齐! (4认同)
  • 如果我们在左右两边都有 drawable 并且只需要调整右边的 drawable 怎么办? (2认同)

Che*_*mon 171

TextView有一个android:drawablePadding属性应该可以解决这个问题:

机器人:drawablePadding

drawables和文本之间的填充.

必须是维值,这是一个附加单位的浮点数,例如"14.5sp".可用的单位是:像素(像素),DP(密度无关的像素),SP(基于优选的字体大小缩放的像素),in(英寸),毫米(mm)表示.

这也可以是对资源的引用(其形式为"@〔包:]类型:名称为")("?[包:] [类型:]名称"的形式)或主题属性包含该类型的值.

这对应于全局属性资源符号drawablePadding.


小智 59

android:drawablePadding如果按钮足够小以将2压缩在一起,则仅在文本和drawable之间创建填充间隙.如果您的按钮宽度超过组合宽度(对于drawableLeft/drawableRight)或高度(对于drawableTop/drawableBottom),则drawablePadding不会执行任何操作.

我现在也在努力解决这个问题.我的按钮非常宽,图标悬挂在按钮的左边缘,文本居中于中间.我现在解决这个问题的唯一方法就是通过在photoshop的画布左边缘添加空白像素来在可绘制的边缘烘烤.不理想,也没有真正推荐.但这就是我现在的止损解决方案,没有重建TextView/Button.


Par*_*sha 41

是.使用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" />
Run Code Online (Sandbox Code Playgroud)


The*_*ist 33

制作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>
Run Code Online (Sandbox Code Playgroud)

  • @ The Finest Artist我在drawable中使用了插图,它适用于较新版本的设备.我的意思是它不在SDK 16,17中工作但在SDK 23中工作.有什么想法吗? (2认同)
  • 来自API 1的http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html (2认同)

Bha*_*nki 33

android:drawablePadding是最简单的方法来为可绘制的图标添加填充但你不能给出特定的一面填充像paddingRightpaddingLeft可绘制的图标.要实现这一点,你必须挖掘它.如果你申请paddingLeftpaddingRightEdittext然后它会放置填充到整个Edittext一起绘制图标.


小智 12

为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>
Run Code Online (Sandbox Code Playgroud)

在这种形状中定义的填充将有助于为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"
         />
Run Code Online (Sandbox Code Playgroud)

使用该定义的形状作为背景将为EditText提供一些样式加上drawableLeft的边距.


sad*_*dat 11

另一个简单的解决方案可以通过插入图层列表来实现

分层绘制

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <inset
            android:insetRight="30dp"
            android:drawable="@drawable/ic_air_date">
        </inset>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

XML 中的按钮

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/layered_drawable"
    android:text="something" />
Run Code Online (Sandbox Code Playgroud)


Dan*_*hoa 8

我也会把答案也弄响。如果要以编程方式执行此操作,则可以执行以下操作。

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);
Run Code Online (Sandbox Code Playgroud)

这会将填充添加到可绘制对象的末尾,其中末尾将表示左/右,具体取决于电话是处于LTR还是RTL中。


王良海*_*王良海 8

<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"/>
Run Code Online (Sandbox Code Playgroud)

注意:layout_width需要是wrap_content并使用paddingLeft paddingRight drawablePadding来控制间隙.如果你指定layout_width值会有图标和文本之间的差距,我想一旦给layout_width一个指定值,padding就会测量.


Ale*_*rov 7

而不是与内部一起Button使用.在儿童用品和喜欢和使用.LinearLayoutImageViewTextViewImageViewTextViewandroid:duplicateParentState="true"

  • 如果您已经在 TextView 中有 drawablePadding,为什么还要使用额外的布局。 (3认同)

Vik*_*alp 7

android:drawablePadding是为可绘制图标提供填充的最简单方法,但是您不能给特定的一侧填充(例如可绘制图标的paddingRight或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"/>
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以为按钮使用填充,并且可以使用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" />
Run Code Online (Sandbox Code Playgroud)

您可以使用特定的填充取决于放置可绘制对象的位置,其中 android:paddingLeft="10dp" 或 android:paddingBottom="10dp" 或 android:paddingRight="10dp" 或 android:paddingTop="10dp"


Ray*_*gJH 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>
Run Code Online (Sandbox Code Playgroud)

在布局文件下,

<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" 
    />
Run Code Online (Sandbox Code Playgroud)