如何减少Android按钮对象中文本周围的内部填充?
问题的原因是在Material Components Library中,MaterialButton默认具有insetBottom和insetTop属性,其值为6dp,导致按钮内部文本周围存在内边距。为了解决这个问题,可以通过在布局中或样式中修改这些属性的值来减少内边距。
在布局中修改属性的值:
在样式中修改属性的值:
以上是解决问题的方法,通过将insetTop和insetBottom属性的值设置为0dp,可以减少按钮内部文本周围的内边距。
具体示例如下图所示:
[图片1](https://i.stack.imgur.com/0cNSH.png)
[图片2](https://i.stack.imgur.com/zV8HF.png)
问题的出现原因:
在Android中,按钮对象内部的文本周围的"padding"实际上并不是真正的padding。默认的Widget.Button样式包含一个minHeight属性,而不是padding属性。这导致了在调整padding时出现问题。
解决方法:
要调整按钮文本周围的padding,需要更改按钮的minHeight属性。通过更改minHeight属性,可以实现预期的padding调整。
具体操作示例:
1. 在布局文件中的Button标签中添加android:minHeight="40dip"属性,例如:
2. 在样式文件中的Widget.Holo.Button样式中添加android:minHeight属性,例如:
注意:如果使用的主题不是"holo"主题,可能需要在不同的位置添加minHeight属性。
补充:
- 如果遇到宽度的类似问题,可以尝试设置android:minWidth="0dp",但是对于按钮中的长文本,可能需要设置android:paddingRight和android:paddingLeft以避免布局问题。
- Widget.Button没有minHeight属性,它是在主题按钮中定义的。如果使用的主题不同于"holo"主题,可能需要在不同的位置查找minHeight属性。
- 使用MaterialButton时,即使设置了height和minHeight为相同的值,仍然会存在padding。这是因为按钮背景的高度会小于指定的高度。可以通过添加android:insetTop="0dp"和android:insetBottom="0dp"属性来解决这个问题,这样可以最终去除padding并将按钮背景的高度设置为指定的高度。