Android 实现圆角按钮 ( selector状态选择器)

不知道说什么,直接进入正题吧。开整


selector

<!--注意 android:background="@drawable/btn_selector"-->

    <Button

        android:id="@+id/Button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerInParent="true"

        android:background="@drawable/btn_selector"

        android:text="@string/hello_world" />

btn_selector是一个自定义的xml文件,继续看这个文件。在drawable目录下新建一个selector文件,btn_selector.xml

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Button正常状态下的背景 -->

    <item android:drawable="@drawable/btn_bg_normal" android:state_pressed="false"/>

    <!-- Button按下时的背景 -->

    <item android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true"/>

</selector>


btn_selector.xml文件中大家又发现了btn_bg_normalbtn_bg_pressed,这两个文件也是在res/drawable目录下的定义的。

btn_bg_normal.xml

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

<!-- 按钮正常的时候的背景 -->

<!-- shape的默认形状是rectangle,还有oval(椭圆),line(线),ring(圆环)-->

<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 矩形的圆角弧度 -->

    <corners android:radius="10dp" />

    <!-- 矩形的填充色 -->

    <solid android:color="#FF4081" />

    <!-- 矩形的边框的宽度,每段虚线的长度,和两段虚线之间的颜色和颜色 -->

    <stroke

        android:width="1dp"

        android:dashWidth="8dp"

        android:dashGap="4dp"

        android:color="#4eb621" />

</shape>

btn_bg_pressed.xml

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

<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 矩形的圆角弧度 -->

    <corners android:radius="10dp" />

    <!-- 矩形的填充色 -->

    <solid android:color="#3F51B5" />

    <!-- 矩形的边框的宽度,每段虚线的长度,和两段虚线之间的颜色和颜色 -->

    <stroke

        android:width="1dp"

        android:color="#4eb621"

        android:dashGap="4dp"

        android:dashWidth="8dp" />

</shape>

gradient 渐变背景色

<gradient

  android:angle="integer"

  android:centerX="Float"

  android:centerY="Float"

  android:centerColor="integer"

  android:startColor="color"

  android:endColor="color"

  android:gradientRadius="integer"

  android:type=["linear"|"radial"|"sweep"]

  android:usesLevel=["true"|"false"]

  />

angle:角度,当 android:type=“linear”时有效 ,角度数应该是45度的倍数,逆时针方向旋转

centerX:Float。渐变色中心的 X 相对位置( 0-1.0 )。当 android:type=“linear”时无效

centerY:Float。渐变色中心的 Y 相对位置( 0-1.0 )。当 android:type=“linear”时无效

centerColor:color。可选的颜色,出现在 start 和 end 颜色之间。

gradientRadius:Float。渐变色的半径。当 android:type=“radial” 时有效。

startcolor:开始的颜色

endcolor:结束的颜色

type:渐变色的样式。有效值为:

“linear”:线性渐变,默认值

“radial”:环形渐变。 start 颜色是处于中间的颜色

“sweep”:扇形渐变

useLevel:Boolean。“ true ”表示可以当作 LevelListDrawable 使用







两种创建方式:

以Xml方式写出状态选择器,然后将我们写好的selector状态器存在放res - drawable res - color 文件夹下,较为常用

在代码中动态创建selector,实现不如前者简单,但胜在灵活,一般用在选择器状态改变频繁的情况下

注意(请格外注意):

设置 bankgrpud的时候,我们的selector状态选择器存放在res - drawable 下!!!

设置TextColor属性的时候,我们的selector状态选择器存放在res - color 下!!!

状态设置类型:

常用类型

//设置是否按压状态,一般在true时设置该属性,表示已按压状态,默认为false

android:state_pressed

//设置是否选中状态,true表示已选中,false表示未选中

android:state_selected

//设置是否勾选状态,主要用于CheckBox和RadioButton,true表示已被勾选,false表示未被勾选

android:state_checked

//设置勾选是否可用状态,类似state_enabled,只是state_enabled会影响触摸或点击事件,state_checkable影响勾选事件

android:state_checkable

//设置是否获得焦点状态,true表示获得焦点,默认为false,表示未获得焦点

android:state_focused

//设置触摸或点击事件是否可用状态,一般只在false时设置该属性,表示不可用状态

android:state_enabled

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

常用类型示例:

*样式一:点击改变字体颜色 - android:state_pressed(按压状态) **

selector状态选择器(bg_btn_one (存放 res - color))

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/colorPrimary" android:state_pressed="true"/>

    <item android:color="@color/colorAccent" />

</selector>

使用处:

    <Button

        android:textColor="@color/bg_btn_one"

        android:layout_width="match_parent"

        android:layout_height="45dp"

        android:text="样式一:点击改变字体颜色"

        android:gravity="center"

        />

样式二:点击改变背景颜色

selector状态选择器(bg_btn_two (存放 res - drawable))

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/colorAccent" android:state_pressed="true"/>

    <item android:drawable="@color/colorPrimary" />

</selector>


使用处:

  <Button

        android:background="@drawable/bg_btn_two"

        android:layout_width="match_parent"

        android:layout_height="45dp"

        android:text="样式二:点击改变背景颜色"

        android:gravity="center"

        />


样式三:改变背景色同时改变字体色

selector状态选择器(bg_btn_one (存放 res - color))

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/colorPrimary" android:state_pressed="true"/>

    <item android:color="@color/colorAccent" />

</selector>


selector状态选择器(bg_btn_two (存放 res - drawable))

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/colorAccent" android:state_pressed="true"/>

    <item android:drawable="@color/colorPrimary" />

</selector>


使用处:

<Button

        android:background="@drawable/bg_btn_two"

        android:textColor="@color/bg_btn_one"

        android:layout_width="match_parent"

        android:layout_height="45dp"

        android:text="样式三:改变背景色同时改变字体色"

        android:gravity="center"

        />


样式四: android:state_checked (勾选状态)

selector状态选择器(bg_check_three(存放 res - drawable))

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/colorPrimary" android:state_checked="true"/>

    <item android:drawable="@color/colorAccent" />

</selector>


使用处:

  <CheckBox

        android:layout_marginTop="20dp"

        android:id="@+id/btn"

        android:background="@drawable/bg_check_three"

        android:layout_width="match_parent"

        android:layout_height="45dp"

        android:text="Checked:点击后背景状态长存"

        android:gravity="center"

        />


样式五:android:state_focused (焦点状态)

selector状态选择器(bg_check_three(存放 res - color))

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/colorPrimary" android:state_focused="true"/>

    <item android:color="@color/colorAccent" />

</selector>


<EditText

        android:textColor="@color/bg_edittext_one"

        android:layout_width="match_parent"

        android:layout_height="45dp"

        android:text="焦点样式:改变背景色同时改变字体色"

        android:gravity="center"

        />

 读到最后的福利,这才是重点啊。哈哈哈哈哈哈


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