Android MaterialButton 无需icon属性设置drawableLeft与文字间距
解决方案
完全基于你现有的样式和drawableLeft属性实现,无需使用icon相关属性,不会产生阴影问题:
1. 调整自定义样式,消除默认边距
MaterialButton默认自带左右内边距,会放大图标和文字的视觉间距,首先补全样式里的左右inset配置:
<style name="Button" parent="Widget.MaterialComponents.Button.UnelevatedButton"> <item name="android:textAllCaps">false</item> <item name="android:insetTop">0dp</item> <item name="android:insetBottom">0dp</item> <!-- 新增:消除左右默认额外边距 --> <item name="android:insetLeft">0dp</item> <item name="android:insetRight">0dp</item> <item name="android:gravity">center</item> <item name="android:padding">0dp</item> </style>
2. 调整布局属性,控制图标文字间距
核心用android:drawablePadding属性直接控制drawableLeft和文字的间距,数值越小间距越紧凑:
<?xml version="1.0" encoding="utf-8"?> <com.google.android.material.button.MaterialButton xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/btnShortCut" style="@style/Button" android:layout_width="wrap_content" android:layout_height="36dp" android:layout_marginRight="10dp" app:backgroundTint="@color/background" app:cornerRadius="@dimen/cornerM" app:strokeColor="@color/primaryGrey" app:strokeWidth="0.5dp" <!-- 调整按钮整体内边距,可按需修改 --> android:paddingHorizontal="10dp" android:paddingVertical="0dp" <!-- 替换为你的左侧图标资源 --> android:drawableLeft="@drawable/你的图标" <!-- 核心:控制图标和文字的间距,可根据需求调整数值 --> android:drawablePadding="2dp" android:textColor="@color/secondaryText" android:textSize="@dimen/fontBody" />
3. 可选:极致压缩间距
如果以上调整后仍然觉得间距过大,可以用InsetDrawable进一步压缩图标右侧空间:
新建res/drawable/ic_inset_left.xml文件:
<?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/你的原图标" android:insetRight="-2dp"> </inset>
之后把布局里的android:drawableLeft替换为@drawable/ic_inset_left即可,insetRight的负数越大,图标和文字的间距越小。
内容的提问来源于stack exchange,提问作者turboburst
相关产品推荐
相关产品推荐

