如何消除Button文本与按钮上下边框的多余内边距?
Hey,这个问题我之前踩过坑!Android的Button默认藏了不少你看不到的「隐形内边距」,光设置paddingVertical="0dp"确实搞不定,给你几个实用的解决思路:
关闭字体自带的内边距
Button继承自TextView,而TextView默认开启了includeFontPadding属性,这个属性会给文字上下额外添加padding来容纳特殊字符(比如带重音的字母)。你只需要在Button标签里加上:a:includeFontPadding="false"这一步通常能解决80%的文字与边框间距问题。
彻底覆盖系统默认样式
Android的Button默认继承了系统主题的buttonStyle,里面可能偷偷设置了minHeight、内边距或者其他样式属性,哪怕你手动设了minHeight="1px"也可能被主题覆盖。可以自定义一个完全无多余内边距的样式:<style name="NoExtraPaddingButton" parent="Widget.AppCompat.Button"> <item name="android:padding">0dp</item> <item name="android:minHeight">0dp</item> <item name="android:minWidth">0dp</item> <item name="android:includeFontPadding">false</item> </style>然后在Button上引用这个样式:
style="@style/NoExtraPaddingButton"检查背景Drawable的内边距
如果你用的是自定义背景Drawable(哪怕是纯色),有些Drawable本身可能自带padding。比如系统默认的Button背景是带圆角的shape,里面可能有内边距设置。你当前用的是纯色背景a:background="#ffff0000"没问题,但如果后续换成xml Drawable,一定要确保Drawable里没有设置padding属性。极端方案:用TextView模拟Button
如果上面的方法都没效果,可以直接用TextView来替代Button,完全摆脱Button的默认样式限制。只需要给TextView加上点击和焦点属性:<TextView a:layout_width="wrap_content" a:layout_height="match_parent" a:background="#ffff0000" a:paddingHorizontal="15dp" a:paddingVertical="0dp" a:text="你的按钮文本" a:clickable="true" a:focusable="true" a:includeFontPadding="false"/>
内容的提问来源于stack exchange,提问作者user7232539

