安卓button代码初始化默认内边距问题

一般在xml布局文件中设置一个button,如果出现默认内边距,可以通过以下设置来消除默认的内边距:

android:padding="0dp"
android:minWidth="0dp"
android:minHeight="0dp"

但是今天需要用代码初始化一个button,理论上设置对应的属性就OK了,那么应该是这样的。

Button button = new Button(context);
button.setPadding(0, 0, 0, 0);
button.setMinHeight(0);
button.setMinWidth(0);

结果事实证明,我还是太年轻,设置过之后什么都没有发生。
AE0DCB694DEBE07B264F61A25C954383.png

Debug模式下,对比代码初始化的button和xml初始化的button,发现最小高度属性并没有修改,真是奇怪了!


2D32E80CCC2B11A8CD4A05F8AA04CFBB.png

搜索源码,原来是另一个方法在修改这个属性。于是修改为如下代码:

Button button = new Button(context);
button.setPadding(0, 0, 0, 0);
button.setMinimumHeight(0);
button.setMinimumWidth(0);

然后运行,测试。emmmmmm......


9EBDF232B6AE9FEE4DB1E5BEFD7C2252.jpg
Button button = new Button(context);
button.setPadding(0, 0, 0, 0);
button.setMinimumHeight(0);
button.setMinimumWidth(0);
button.setMinHeight(0);
button.setMinWidth(0);

怎么可能还是不行。

最后只好都加上了,问题也解决了,诡异的逻辑。后来查看了初始化的代码,其实是因为我使用的方法,系统调用了com.android.internal.R.attr.buttonStyle的样式,所以默认添加很多不必要的属性设置。其实初始化的时候,使用另外一个方法,这些凡人的东西都统统不见了。

Button button = new Button(context, null, 0);

你可能感兴趣的:(安卓button代码初始化默认内边距问题)