答案 0 :(得分:423)
正如提到的cephus android:drawablePadding
只会在按钮足够小的情况下强制填充文本和drawable之间的填充。
在布置较大的按钮时,您可以将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" />
答案 1 :(得分:168)
答案 2 :(得分:56)
android:drawablePadding
只会在文本和drawable之间创建填充间隙,如果按钮小到足以将2压缩在一起。如果您的按钮宽度超过组合宽度(对于drawableLeft / drawableRight)或高度(对于drawableTop / drawableBottom),则drawablePadding不会执行任何操作。
我现在也在努力解决这个问题。我的按钮非常宽,图标悬挂在按钮的左边缘,文本居中于中间。我现在解决这个问题的唯一方法就是通过在photoshop的画布左边缘添加空白像素来在可绘制的边缘烘烤。不理想,也没有真正推荐。但这就是我现在的止损解决方案,而不是重建TextView / Button。
答案 3 :(得分:39)
是。使用 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" />
答案 4 :(得分:32)
android:drawablePadding
是为可绘制图标添加填充的最简单方法,但是您无法提供特定的一面填充,如paddingRight
或paddingLeft
可绘制图标。要实现这一点,您必须挖掘进去。
如果您将paddingLeft
或paddingRight
应用于Edittext
,那么它会将填充与可绘制图标一起放置到整个Edittext
。
答案 5 :(得分:31)
制作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>
答案 6 :(得分: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>
此形状中定义的填充将有助于为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的边距。
答案 7 :(得分:7)
而不是Button
在LinearLayout
和ImageView
内使用TextView
。在ImageView
和TextView
等子项中使用android:duplicateParentState="true"
。
答案 8 :(得分:7)
<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 :(得分:4)
您可以为按钮使用填充,您可以使用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" />
你可以使用一个特定的填充取决于把你的drawable放在哪里,用android:paddingLeft =&#34; 10dp&#34;或者android:paddingBottom =&#34; 10dp&#34;或者android:paddingRight =&#34; 10dp&#34;或者android:paddingTop =&#34; 10dp&#34;
答案 10 :(得分:3)
您应该考虑使用图层列表
像这样创建一个可绘制文件,将其命名为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"
/>
答案 11 :(得分:3)
我也会把我的答案扔进戒指。如果您想以编程方式执行此操作,则可以执行以下操作。
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);
这会将填充添加到drawable的末尾,其中end将表示左/右,具体取决于手机是否处于LTR或RTL。
答案 12 :(得分:2)
您可以使用android:drawableLeft="@drawable/your_icon"
将drawable设置为显示在左侧。要为drawable设置填充,您应该使用android:paddingLeft
或android:paddingRight
分别设置左/右填充。
android:paddingRight="10dp"
android:paddingLeft="20dp"
android:drawableRight="@drawable/ic_app_manager"
答案 13 :(得分:2)
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"/>
答案 14 :(得分:2)
另一个简单的解决方案可以通过插入图层列表来实现
layered_drawable
<?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>
XML 中的按钮
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/layered_drawable"
android:text="something" />
答案 15 :(得分: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。
答案 16 :(得分:0)
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);
addressTitleView.setCompoundDrawablePadding();
答案 17 :(得分: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>
答案 18 :(得分:-4)
尝试使用负填充
喜欢:
android:paddingLeft="-8dp"