修改方法:
1、在主题中添加这样属性
2、修改最小宽高为0dp
需注意:古老的 Button 使用的是系统的buttonStyle,无法修改,而AppCompatButton使用的是自己的buttonStyle可以修改,所以如果是自定义的Button,需要继承AppCompatButton。
解决的问题:
有个很常见的需求,UI给了一张图,说这是个按钮,上面有文字显示。以前的SDK版本中这种需求很容易实现, 定义个Button,设置背景图和文字就行了。
但是SDK版本升高后,人们惊讶的发现,Button的大小不是适应背景图的了:
图:第一个是有背景的按钮。第二个是无背景按钮。第三个是普通TextView。
此时可以修改Button为TextView实现效果。
最近我在升级SDK版本,发现这样写的按钮还不少,难道我要修改那么多的代码?有更好的方法吗?
解决过程:
1、首先我发现普通的TextView的宽高是随背景图变化的,必然是Button与TextView的某个区别导致上述问题。
2、Button是继承TextView的,浏览源码得知Button的代码很少,区别只有两处
(1)Button的构造函数多了个style
(2) 重写了一个我没见过的方法
3、这两者之一导致问题出现,我经过断点排查,发现根本没有走到区别(2)的代码处。于是可以肯定是区别(1)的问题,“style导致Button大小不能自适应背景图”
4、我在源码中跟踪这个style“buttonStyle”,进入了看着很眼熟的 AppCompat 主题
5、跟踪到终点发现了 minWidth 和 minHeight,我寻思好像Button的大小就是这个,而且以前跟踪的TextView主题中没有这两个值,于是尝试重写它,改为0dp (图见修改方法中的操作)
至于为什么不继承别的ButtonStyle,本质是因为我懒(尬笑),本着可能有坑的态度,我检查了其它的 buttonStyle,发现它们只是改了下外观。