让 Button 大小适应背景图

修改方法:

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,发现它们只是改了下外观。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值