android:drawableLeft margin和/或padding

android:drawableLeft margin和/或padding,android,android-layout,android-drawable,Android,Android Layout,Android Drawable,是否可以为我们使用android:drawableLeft添加的图像设置边距或填充?文本视图有一个属性,可以实现以下功能: android:drawablePadding 绘图和文本之间的填充 必须是维度值,该值是附加的浮点数 使用诸如“14.5sp”之类的单位。可用单位为:像素(px),dp (与密度无关的像素),sp(基于首选像素的缩放像素) 字体大小),英寸,毫米 这也可能是对资源的引用(在 “@[package:]type:name”)或主题属性(格式为 “?[package:[type

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

文本视图有一个属性,可以实现以下功能:

android:drawablePadding

绘图和文本之间的填充

必须是维度值,该值是附加的浮点数 使用诸如“14.5sp”之类的单位。可用单位为:像素(px),dp (与密度无关的像素),sp(基于首选像素的缩放像素) 字体大小),英寸,毫米

这也可能是对资源的引用(在 “@[package:]type:name”)或主题属性(格式为 “?[package:[type:]name”)包含此类型的值

这对应于全局属性资源符号 可拉伸衬垫


android:drawablePadding
仅当按钮小到足以将2个字符挤压在一起时,才会在文本和可绘制字符之间创建填充间隙。如果按钮宽度大于组合宽度(适用于drawableLeft/drawableRight)或高度(适用于drawableTop/drawableBottom),则drawablePadding不起任何作用


我现在也在努力解决这个问题。我的按钮相当宽,图标挂在按钮的左边,文本以中间为中心。目前,我唯一的解决办法就是在可绘制的画布上烘焙一个空白区域,用photoshop在画布的左边缘添加空白像素。不是很理想,也不是很推荐。但这是我目前的权宜之计,除了重建文本视图/按钮之外。

正如cephus提到的
android:drawablePadding
仅在按钮足够小的情况下,才会强制在文本和可绘图之间进行填充

在布置较大的按钮时,您可以使用
android:drawablePadding
android:paddingLeft
android:paddingRight
结合使用,以强制文本和drawable向内朝向按钮的中心。通过分别调整左侧和右侧填充,可以对布局进行非常详细的调整

下面是一个示例按钮,它使用填充将文本和图标按得比默认值更近:

<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
这样的子项中,使用
android:duplicateParentState=“true”
尝试使用负填充

比如:

android:paddingLeft="-8dp"

为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添加边距。

创建DrawableResources.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
是给可绘制图标添加填充的最简单方法,但你不能像可绘制图标的
paddingRight
paddingLeft
那样指定单面填充。要实现这一点,你必须深入研究。
如果您将
paddingLeft
paddingRight
应用于
Edittext
,则它会将填充放置在整个
Edittext
以及可绘制图标上。

您可以使用
android:drawableLeft=“@drawable/your_icon”
将可绘制图标设置为显示在左侧。要为可绘制文件设置填充,应使用
android:paddingLeft
android:paddingRight
分别设置左/右填充

android:paddingRight="10dp"
android:paddingLeft="20dp"
android:drawableRight="@drawable/ic_app_manager"
<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"/>

您可以使用按钮填充,也可以使用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: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" />
也就是说,可绘制资源的大小加上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" 
    />

我也会把我的答案扔进拳击场。如果希望以编程方式执行此操作,可以执行以下操作

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"/>
注意:布局宽度需要为包裹内容,并使用paddingLeft paddingRight drawablePadding控制间隙。如果指定布局宽度值,图标和文本之间会有间隙,我认为一旦指定布局宽度值,填充将测量。

只需从以下内容重新制作:

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



android:drawablePadding
是给可绘制图标添加填充的最简单方法,但你不能像可绘制图标的
paddingRight
paddingLeft
那样指定单面填充。要实现这一点,你必须深入研究。如果将
paddingLeft
paddingRight
应用于
EditText
,则它会将整个
EditText
以及可绘制图标放置padding

<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实现

分层\u可绘制

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


谢谢你解释我的问题。我还没意识到这是因为按钮太宽造成的,尽管我也有同样的问题。我的按钮是
<?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>
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/layered_drawable"
    android:text="something" />