是否可以为我们使用android:drawableLeft添加的图像设置边距或填充?
android:drawableLeft
TextView有一个android: drawablePadding属性,它应该做的技巧:
android: drawablePadding 绘图和文本之间的填充。 必须是维度值,是一个附加的浮点数 以“14.5sp”为单位。可用单位为:px(像素),dp (密度无关像素),sp(基于首选的缩放像素 字体大小),in(英寸),mm(毫米). 也可以是对资源的引用(形式为 "@[package:]type:name")或主题属性(格式为 "?[package:][type:]name")包含该类型的值 这对应于全局属性资源符号 drawablePadding . < / p >
android: drawablePadding
绘图和文本之间的填充。
必须是维度值,是一个附加的浮点数 以“14.5sp”为单位。可用单位为:px(像素),dp (密度无关像素),sp(基于首选的缩放像素 字体大小),in(英寸),mm(毫米).
也可以是对资源的引用(形式为 "@[package:]type:name")或主题属性(格式为 "?[package:][type:]name")包含该类型的值
这对应于全局属性资源符号 drawablePadding . < / p >
android:drawablePadding只会在文本和可绘制对象之间创建一个填充间隙,如果按钮足够小,可以将两者挤在一起。如果你的按钮比组合宽度(用于drawablleft /drawableRight)或高度(用于drawableTop/drawableBottom)更宽,那么drawablePadding不会做任何事情。
android:drawablePadding
我现在也在为这个问题挣扎。我的按钮很宽,图标挂在按钮的左边缘,文本在中间居中。我唯一的方法来解决这个问题,现在已经烘焙在可绘制的边缘,通过添加空白像素到画布的左边缘用photoshop。不理想,也不推荐。但这是我目前的权宜之计,短的重建TextView/按钮。
正如cephus提到的,android:drawablePadding只会在按钮足够小的情况下强制在文本和可绘制对象之间填充。
当布局较大的按钮时,可以使用android:drawablePadding与android:paddingLeft和android:paddingRight结合使用,强制将文本和可绘制内容向内指向按钮的中心。通过分别调整左右填充,你可以对布局进行非常详细的调整。
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" />
使用包含ImageView和TextView的LinearLayout代替Button。在像ImageView和TextView这样的子项中使用android:duplicateParentState="true"。
ImageView
TextView
LinearLayout
Button
android:duplicateParentState="true"
尝试使用负填充
如:
android:paddingLeft="-8dp"
<?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>
<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一些风格加上边框drawablleft。
创建可绘制的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>
paddingRight
paddingLeft
Edittext
你可以使用android:drawableLeft="@drawable/your_icon"来设置可绘制对象显示在左边。为了设置可绘制对象的填充,你应该使用android:paddingLeft或android:paddingRight分别设置左/右填充。
android:drawableLeft="@drawable/your_icon"
android:paddingRight="10dp" android:paddingLeft="20dp" android:drawableRight="@drawable/ic_app_manager"
你可以为按钮使用填充,你可以使用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="10dp"或android:paddingBottom="10dp"或android: paddinggright ="10dp"或android:paddingTop="10dp"
如果可绘制资源的大小是固定的,你可以这样做:
<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。
您可以在本例中看到结果
是的。使用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" />
你应该考虑使用图层列表
创建一个这样的可绘制文件,将其命名为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" />
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null); addressTitleView.setCompoundDrawablePadding();
我也会把我的答案扔到擂台上。如果您希望以编程方式完成此操作,可以执行以下操作。
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。
<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一个指定的值,填充将测量。
重新制作:
<?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/_2dp" android:left="@dimen/_2dp" android:bottom="@dimen/_2dp" android:top="@dimen/_2dp" > <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="40dp"/> <solid android:color="@android:color/white"/> </shape> </item> </layer-list>
根据@Bhargav Thanki:
android:drawablePadding是最简单的方法 可绘制图标,但你不能给特定的一侧填充像 可绘制图标的paddingRight或paddingLeft。为了实现这个目标 必须深入调查。如果你应用paddingLeft或paddingRight EditText,然后它将沿着整个EditText放置填充
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"/>
另一个简单的解决方案可以通过嵌入layerlist实现
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" />