在按钮内设置可绘制位置

时间:2014-08-29 08:59:03

标签: android android-button android-drawable

我在文本的左边有一个按钮和一个可绘制的,但我希望drawable更接近文本。所以我需要移动drawable。

我已经定义了android:drawableLeft但是按钮的内容没有居中。

这是我的代码:

<Button
    android:id="@+id/addsubject"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/ic_action_add"
    android:layout_centerHorizontal="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="20dp"
    android:text="@string/addsubject"
    android:textColor="@color/white"
    android:background="@drawable/custombutton1" />

以下是现在的样子:

enter image description here

以下是我喜欢的方式:

enter image description here

谢谢!

8 个答案:

答案 0 :(得分:9)

试试这个

 <Button
    android:id="@+id/addsubject"
    android:layout_width="160dip"
    android:layout_height="60dip"
    android:layout_gravity="center"
    android:drawableLeft="@drawable/ic_action_add"
    android:drawablePadding="2dip"
    android:gravity="center"
    android:paddingLeft="30dip"
    android:paddingRight="26dip"
    android:singleLine="true"
    android:text="@string/addsubject"
    android:textSize="13dip" />

答案 1 :(得分:6)

使用app:iconGravity="textStart"

中的 MaterialButton 属性
    <com.google.android.material.button.MaterialButton
        app:icon="@drawable/ic_add_24px"
        app:iconGravity="textStart"
        ../>

enter image description here

如果要减少图标和文本之间的填充,只需使用 app:iconPadding 属性:

    <com.google.android.material.button.MaterialButton
        app:icon="@drawable/ic_add_24px"
        app:iconGravity="textStart"
        app:iconPadding="0dp"/>

enter image description here

答案 2 :(得分:2)

您可以通过添加OnClickListener并根据需要自定义使用LinearLayout作为您的按钮。

<LinearLayout          
    android:layout_width="160dip"
    android:layout_height="60dip"
    android:orientation="horizontal" 
    android:background="@drawable/custombutton1">

    <ImageView android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:src="@drawable/ic_action_add"
               android:layout_gravity="center"
               android:layout_weight="1"
               android:scaleType="center">

    </ImageView>

    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/addsubject"
              android:layout_gravity="center"
              android:layout_weight="1"/>

</LinearLayout>

答案 3 :(得分:1)

按钮左边框和图标右边框之间的填充由android:paddingLeft属性控制。图标和文本之间的填充由android:drawablePadding属性定义。

将这两个属性添加到您的按钮并设置您满意的值。

<Button
    ...
    android:paddingLeft="24dp"
    android:drawablePadding="8dp"
    />

答案 4 :(得分:1)

我通过简单地将这些属性专门添加到按钮

来获得此结果
<Button
    ...
    android:paddingLeft="60dp"
    android:drawablePadding="-50dp"
    android:gravity="center"
    android:drawableLeft="@drawable/your_button_icon"
    /> 

您可以使用自己的值收听所需的结果。

干杯: - )

答案 5 :(得分:1)

我只是使用paddingLeft和paddingRight做到了这一点。它的作品! ... android:paddingLeft="25dp" android:paddingRight="25dp" />

答案 6 :(得分:0)

在阅读了一会儿并使用大量XML组合后,您还希望以编程方式使drawable / icon膨胀,还有其他可能性,但仍然不可行,

您可能希望将其分叉到库下面,以适合您的用例,例如以编程方式自定义视图,位置等,请参见以下参考资料:

  1. Drawable/icon aligned with text,请参见sample here
  2. Button like facebook sign-in,请参见sample here
  3. 有关RadioButton,请参见full gist code here

P.S:版权所有并尊重作者

答案 7 :(得分:0)

对于Materialbutton,您必须使用 icon 属性,还可以使用 iconTint 更改其色调,例如以下示例:

<com.google.android.material.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:icon="@drawable/ic_cancel"
    app:iconTint="@color/black"
    android:text="text" />