Android 系统Button 默认样式buttonStyle引发的一些问题以及思考

很多时候我们在自定义button的背景时会发现,无论如何button的大小总是那么什么…

首先selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--点击背景-->
    <item android:state_pressed="true">
        <shape>
            <!--色值-->
            <solid android:color="@color/dark_green1" />
            <!--圆角-->
            <corners android:radius="5dp" />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape>
            <!--色值-->
            <solid android:color="@color/dark_green1" />
            <!--圆角-->
            <corners android:radius="5dp" />
        </shape>
    </item>

    <item android:state_enabled="false">
        <shape>
            <!--色值-->
            <solid android:color="@color/LightGray" />
            <!--圆角-->
            <corners android:radius="5dp" />
        </shape>
    </item>

    <!--默认背景-->
    <item>
        <shape>
            <solid android:color="@color/dark_green" />
            <corners android:radius="5dp" />
            <padding android:bottom="8dp" android:left="22dp" android:right="22dp" android:top="8dp"/>
        </shape>
    </item>
</selector>

wrap_content的效果:
这里写图片描述

看起来还可以,但当你想要去调整button大小时你可能想到应该是padding的问题,你发现设置之后没有效果,但是又不能设置固定的值,怎么办呢?

两种办法:
1. 不用button,用textview即可
2. 继续使用button,但需要明确问题的所在

那么问题的所在无非就在系统默认的buttonStyle中了,那么如何查看系统默认的buttonStyle呢,步骤如下(api27):

  1. 打开任意布局文件,ctrl+左键打开button源码,即可看到默认的style名为buttonStyle
    这里写图片描述

  2. 查看源码,打开D:\AndroidDev\sdk\platforms\android-27\data\res\values\attrs.xml 可看到
    这里写图片描述

  3. 打开D:\AndroidDev\sdk\platforms\android-27\data\res\values\themes_material.xml 可看到引用的是@style/Widget.Material.Button
    这里写图片描述

  4. 打开D:\AndroidDev\sdk\platforms\android-27\data\res\values\styles_material.xml 即可看到默认的样式
    这里写图片描述

可以看到默认的Style设置了最小宽高了,如果你控件中没有设置这两个值,那么就会默认使用这两个值,所以当你使用wrap_content的时候,无论你怎么调,只要不大于这两个值,那么控件的大小都不会变。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值