各种样式Button记录(支持点击/触摸变色)

基本每个项目都会遇到各种各样的按钮样式


GIF.gif

1.xml布局代码activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="2dp">

        <Button
            android:id="@+id/button1"
            style="@style/AppTheme.btnStyle.Primary"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="边框按钮" />

        <Button
            style="@style/AppTheme.btnStyle.RoundPrimary"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:text="边框按钮" />

        <Button
            style="@style/AppTheme.btnStyle.RoundPrimaryAll"
            android:layout_marginTop="10dp"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:text="边框按钮" />

    </RelativeLayout>

    <Button
        style="@style/AppTheme.btnStyle.Normal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/rlData"
        android:layout_marginTop="10dp"
        android:text="正常按钮" />

    <Button
        style="@style/AppTheme.btnStyle.Normal.Round"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/rlData"
        android:layout_marginTop="10dp"
        android:text="背景色按钮" />

    <Button
        style="@style/AppTheme.btnStyle.Normal.RoundAll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="圆框按钮" />

    <Button
        style="@style/AppTheme.btnStyle.Normal.GreenDotted.Normal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="虚线按钮" />

    <Button
        style="@style/AppTheme.btnStyle.Normal.GreenDotted"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="虚线按钮" />

    <Button
        style="@style/AppTheme.btnStyle.Normal.GreenDottedRound"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="虚线按钮" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/recyclerView"
        android:layout_marginTop="5dp"
        android:orientation="horizontal">

        <Button
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:layout_alignParentBottom="true"
            android:background="@drawable/btn_normal_darktop"
            android:text="关闭"
            android:textColor="@color/colorwhite"
            android:textSize="15sp"
            android:layout_centerHorizontal="true"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:layout_alignParentBottom="true"
            android:background="@drawable/btn_normal_primarytop"
            android:text="立即升级"
            android:textColor="@color/colorBar"
            android:textSize="15sp"
            android:layout_centerHorizontal="true"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/recyclerView"
        android:layout_marginTop="5dp"
        android:orientation="horizontal">

        <Button
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:layout_alignParentBottom="true"
            android:background="@drawable/btn_normal_dark"
            android:text="关闭"
            android:textColor="@color/colorwhite"
            android:textSize="15sp"
            android:layout_centerHorizontal="true"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:layout_alignParentBottom="true"
            android:background="@drawable/btn_normal_primary"
            android:text="立即升级"
            android:textColor="@color/colorBar"
            android:textSize="15sp"
            android:layout_centerHorizontal="true"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

    </LinearLayout>

</LinearLayout>

2.按钮风格styles.xml:

<resources>
    <!-- 自定义Button -->
    <style name="AppTheme.btnStyle">
        <item name="android:textAllCaps">false</item>
        <item name="android:gravity">center</item>
        <item name="android:layout_width">120dp</item>
        <item name="android:layout_height">48dp</item>
        <item name="android:paddingTop">5dp</item>
        <item name="android:paddingRight">10dp</item>
        <item name="android:paddingBottom">5dp</item>
        <item name="android:paddingLeft">10dp</item>
    </style>

    <!-- 正常的按钮 -->
    <style name="AppTheme.btnStyle.Normal">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">45dp</item>
        <item name="android:background">@drawable/btn_normal</item>
        <item name="android:textColor">@android:color/white</item>
        <item name="android:textSize">16sp</item>
    </style>

    <!-- 正常的按钮圆角 -->
    <style name="AppTheme.btnStyle.Normal.Round">
        <item name="android:background">@drawable/btn_normal_round</item>
    </style>

    <!-- 正常的按钮圆角 白底 主色边框-->
    <style name="AppTheme.btnStyle.Normal.RoundStork">
        <item name="android:background">@drawable/btn_round_green</item>
    </style>

    <!-- 正常的按钮圆角 25角度-->
    <style name="AppTheme.btnStyle.Normal.RoundAll">
        <item name="android:background">@drawable/btn_normal_round_all</item>
    </style>

    <!-- 正常白底  主色边框/字 按钮 -->
    <style name="AppTheme.btnStyle.Primary">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">30dp</item>
        <item name="android:background">@drawable/btn_normal_green</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <item name="android:textSize">14sp</item>
    </style>

    <!-- 正常白底  主色边框/字 半圆角按钮 -->
    <style name="AppTheme.btnStyle.RoundPrimary">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">30dp</item>
        <item name="android:background">@drawable/btn_round_green</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <item name="android:textSize">14sp</item>
    </style>

    <!-- 正常白底  主色边框/字圆角按钮 -->
    <style name="AppTheme.btnStyle.RoundPrimaryAll">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">30dp</item>
        <item name="android:background">@drawable/btn_round_green_all</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <item name="android:textSize">14sp</item>
    </style>

    <!-- 主色框/字 虚线按钮 -->
    <style name="AppTheme.btnStyle.Normal.GreenDotted.Normal">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">45dp</item>
        <item name="android:background">@drawable/btn_dotted_normal</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <item name="android:textSize">15sp</item>
    </style>

    <!-- 主色框/字 虚线按钮 -->
    <style name="AppTheme.btnStyle.Normal.GreenDotted">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">45dp</item>
        <item name="android:background">@drawable/btn_dotted_white</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <item name="android:textSize">15sp</item>
    </style>

    <!-- 主色框/字 虚线全圆按钮 -->
    <style name="AppTheme.btnStyle.Normal.GreenDottedRound">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">45dp</item>
        <item name="android:background">@drawable/btn_dotted_round_white</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <item name="android:textSize">15sp</item>
    </style>

</resources>

3.接下去是drawable文件列表:


drawable文件列表.png

btn_dotted_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 填充颜色 -->
    <solid android:color="@color/colorwhite"></solid>

    <!-- 线的宽度,颜色灰色 -->
    <stroke
        android:width="1dp"
        android:color="@color/colorPrimary"
        android:dashGap="3dp"
        android:dashWidth="6dp"></stroke>

</shape>

btn_dotted_round_white.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 填充颜色 -->
    <solid android:color="@color/colorwhite"></solid>

    <!-- 线的宽度,颜色灰色 -->
    <stroke
        android:width="1dp"
        android:color="@color/colorPrimary"
        android:dashGap="3dp"
        android:dashWidth="6dp"></stroke>

    <!-- 矩形的圆角半径 -->
    <corners android:radius="50dp" />

</shape>

btn_dotted_white.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 填充颜色 -->
    <solid android:color="@color/colorwhite"></solid>

    <!-- 线的宽度,颜色灰色 -->
    <stroke
        android:width="1dp"
        android:color="@color/colorPrimary"
        android:dashGap="3dp"
        android:dashWidth="6dp"></stroke>

    <!-- 矩形的圆角半径 -->
    <corners android:radius="5dp" />

</shape>

btn_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false">
        <shape>
            <solid android:color="@color/colorEnableMore" />
        </shape>
    </item>

    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/colorPrimaryDark" />
        </shape>
    </item>

    <item>
        <shape>
            <solid android:color="@color/colorPrimary" />
        </shape>
    </item>

</selector>

btn_normal_dark.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 填充的颜色:这里设置为红色 -->
    <solid android:color="@color/colorBarLight"/>
    <!-- 设置按钮的四个角为弧形   android:radius 弧形的半径 -->
    <corners android:bottomLeftRadius="5dp"
        android:topLeftRadius="0dp"
        android:bottomRightRadius="0dp"
        android:topRightRadius="0dp"/>
</shape>

btn_normal_darktop.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 填充的颜色:这里设置为红色 -->
    <solid android:color="@color/colorBarLight"/>
    <!-- 设置按钮的四个角为弧形   android:radius 弧形的半径 -->
    <corners android:bottomLeftRadius="0dp"
        android:topLeftRadius="5dp"
        android:bottomRightRadius="0dp"
        android:topRightRadius="0dp"/>
</shape>

btn_normal_green.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false">
        <shape>
            <solid android:color="@color/colorwhite" />
        </shape>
    </item>

    <item>
        <shape>
            <stroke android:color="@color/colorPrimary" android:width="1px"/>
        </shape>
    </item>

</selector>

btn_normal_primary.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 填充的颜色:这里设置为红色 -->
    <solid android:color="@color/colorPrimary"/>
    <!-- 设置按钮的四个角为弧形   android:radius 弧形的半径 -->
    <corners android:bottomLeftRadius="0dp"
        android:topLeftRadius="0dp"
        android:bottomRightRadius="5dp"
        android:topRightRadius="0dp"/>
</shape>

btn_normal_primarytop.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 填充的颜色:这里设置为红色 -->
    <solid android:color="@color/colorPrimary"/>
    <!-- 设置按钮的四个角为弧形   android:radius 弧形的半径 -->
    <corners android:bottomLeftRadius="0dp"
        android:topLeftRadius="0dp"
        android:bottomRightRadius="0dp"
        android:topRightRadius="5dp"/>
</shape>

btn_normal_round.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false">
        <shape>
            <corners android:radius="6dp"/>
            <solid android:color="@color/colorEnable" />
        </shape>
    </item>

    <item android:state_pressed="true">
        <shape>
            <corners android:radius="6dp"/>
            <solid android:color="@color/colorPrimaryDark" />
        </shape>
    </item>

    <item>
        <shape>
            <corners android:radius="6dp"/>
            <solid android:color="@color/colorPrimary" />
        </shape>
    </item>

</selector>

btn_normal_round_all.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false">
        <shape>
            <corners android:radius="25dp"/>
            <solid android:color="@color/colorEnable" />
        </shape>
    </item>

    <item android:state_pressed="true">
        <shape>
            <corners android:radius="25dp"/>
            <solid android:color="@color/colorPrimaryDark" />
        </shape>
    </item>

    <item>
        <shape>
            <corners android:radius="25dp"/>
            <solid android:color="@color/colorPrimary" />
        </shape>
    </item>

</selector>

btn_round_blue.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false">
        <shape>
            <corners android:radius="3dp"/>
            <solid android:color="@color/colorwhite" />
        </shape>
    </item>

    <item>
        <shape>
            <corners android:radius="3dp"/>
            <stroke android:color="@color/colorBlue" android:width="1px"/>
        </shape>
    </item>

</selector>

btn_round_green.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false">
        <shape>
            <corners android:radius="3dp"/>
            <solid android:color="@color/colorwhite" />
        </shape>
    </item>

    <item>
        <shape>
            <corners android:radius="3dp"/>
            <stroke android:color="@color/colorPrimary" android:width="1px"/>
        </shape>
    </item>

</selector>

btn_round_green_all.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false">
        <shape>
            <corners android:radius="25dp"/>
            <solid android:color="@color/colorwhite" />
        </shape>
    </item>

    <item>
        <shape>
            <corners android:radius="25dp"/>
            <stroke android:color="@color/colorPrimary" android:width="1px"/>
        </shape>
    </item>

</selector>

btn_round_red_all.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_enabled="false">
        <shape>
            <corners android:radius="25dp"/>
            <solid android:color="@color/colorwhite" />
        </shape>
    </item>

    <item>
        <shape>
            <corners android:radius="25dp"/>
            <stroke android:color="@color/colorRed" android:width="1px"/>
        </shape>
    </item>

</selector>

4.colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- 按钮颜色 白色系 -->
    <color name="btn_color_white_normal">#FFFFFF</color>
    <color name="btn_color_white_pressed">#e5e5e5</color>
    <color name="btn_color_white_disable">#CCCCCC</color>

    <color name="colorPrimary">#39a9ff</color>
    <color name="colorPrimaryDark">#3998ff</color>

    <!-- 透明背景颜色 -->
    <color name="translucent">#00000000</color>
    <!-- 窗口颜色-->
    <color name="colorwindowBackground">#f2f5f7</color>
    <color name="colorTextPrimary">#18202a</color>
    <color name="colorTextBlue">#39b8ff</color>
    <color name="colorTextPrimarySec">#18202a</color>
    <color name="colorTextPrimaryLight">#707b89</color>
    <color name="colorText777">#777777</color>
    <!-- 更浅色字体-->
    <color name="colorTextPrimaryMoreLight">#979797</color>
    <color name="colorLine">#e9eaeb</color>
    <color name="colorLineSec">#eaeaea</color>
    <!-- 内容区域颜色 -->
    <color name="colorItemBg">#FFF</color>
    <color name="colorEnableMore">#18202a</color>
    <color name="colorwhite">#ffffff</color>
    <color name="colorblack">#000000</color>
    <color name="colorEnable">#E5E4E4</color>

    <color name="colorRed">#ff4b38</color>
    <color name="colorOrange">#ff7c25</color>
    <color name="colorBlue">#13de64</color>
    <color name="colorBarLight">#2b2b2c</color>
    <color name="colorBar">#2b2b2d</color>
</resources>

源码传送门:

https://github.com/LXLYHM/ButtonStylesDemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353