欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-14 13:08:24
...

很多时候我们在自定义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的效果:
Android 系统Button 默认样式buttonStyle引发的一些问题以及思考

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

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

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

  1. 打开任意布局文件,ctrl+左键打开button源码,即可看到默认的style名为buttonStyle
    Android 系统Button 默认样式buttonStyle引发的一些问题以及思考

  2. 查看源码,打开D:\AndroidDev\sdk\platforms\android-27\data\res\values\attrs.xml 可看到
    Android 系统Button 默认样式buttonStyle引发的一些问题以及思考

  3. 打开D:\AndroidDev\sdk\platforms\android-27\data\res\values\themes_material.xml 可看到引用的是@style/Widget.Material.Button
    Android 系统Button 默认样式buttonStyle引发的一些问题以及思考

  4. 打开D:\AndroidDev\sdk\platforms\android-27\data\res\values\styles_material.xml 即可看到默认的样式
    Android 系统Button 默认样式buttonStyle引发的一些问题以及思考

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