在使用android:drawableLeft
添加图片后,是否可以为该图片设置边距或填充?
在使用android:drawableLeft
添加图片后,是否可以为该图片设置边距或填充?
正如 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" />
TextView有一个android:drawablePadding属性,可以解决问题:
android:drawablePadding
绘图和文本之间的填充。
必须是一个尺寸值,这是一个浮点数加上单位,例如"14.5sp"。可用的单位有:px(像素),dp(密度无关像素),sp(基于首选字体大小缩放的像素),in(英寸),mm(毫米)。
这也可以是一个资源引用(形式为"@ [package:]type:name")或主题属性(形式为"?[package:][type:]name")包含此类型的值。
这对应于全局属性资源符号drawablePadding。
android:drawablePadding
只有在按钮的宽度(对于 drawableLeft/drawableRight)或高度(对于 drawableTop/drawableBottom)小到足以将两者挤在一起时,才会在文本和图标之间创建填充间隙。 如果按钮比合并后的宽度或高度还要宽,则 drawablePadding 不起作用。
我现在也在苦恼这个问题。 我的按钮非常宽,图标挂在按钮的左边缘,文本位于中间。 目前,我的唯一解决办法是通过在Photoshop中向画布左侧添加空白像素来制作图标边缘的边距。 这不是理想的解决方案,也不建议采用。 但这是我目前的权宜之计,除了重建 TextView/Button 以外没有其他解决方法。
是的,使用 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" />
创建可绘制资源的.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>
android:drawablePadding
是给 drawable 图标添加内边距最简单的方法,但是您不能像给 drawable 图标设置 paddingRight
或 paddingLeft
那样设置特定的一侧内边距。要实现这一点,您需要深入了解它。
如果您对 Edittext
应用 paddingLeft
或 paddingRight
,那么它会在整个 Edittext
包括 drawable 图标上放置内边距。
根据@Bhargav Thanki的说法:
android:drawablePadding
是给绘制图标添加填充的最简单方法,但您无法像paddingRight
或paddingLeft
一样为绘制图标的特定一侧提供填充。要实现这一点,您需要深入研究它。如果您对EditText
应用paddingLeft
或paddingRight
,则它将在整个EditText
中放置填充和绘制图标。
例如:
<TextView
android:layout_width="match_parent"
android:padding="5dp"
android:id="@+id/date"
android:gravity="center|start"
android:drawableEnd="@drawable/ic_calendar"
android:background="@drawable/edit_background"
android:hint="Not Selected"
android:drawablePadding="10dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:textColor="@color/black"
android:layout_height="wrap_content"/>
为您的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"
/>
<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指定一个具体的值,padding就会进行测量。
我也想发表我的看法。如果您想以编程的方式实现此操作,可以执行以下操作。
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状态)。
passwordToggleDrawable
的左填充间隙变大。 - 林果皞