android 控制按钮各个状态的样式

在定义按钮时,有一个 android:background 属性,通常会直接指定一个图片或一种颜色,比如"@drawable/ic_launcher"或"#36f",但这样指定,会使按钮自始至终都一个样子,不会因为点击而改变~~

那如何更加细致的控制按钮的样式呢~~

这里将介绍一个通用的方法,就是用<selector>,这个方法应该不仅仅适用于按钮~~

android:background 属性可以指定一个xml文件:android:background="@drawable/buttonstyle"
当然,你要在drawable文件夹下创建一个buttonstyle.xml文件。
文件的写法网上也有一些~我把用不到的都删掉了,

<?xml version="1.0" encoding="utf-8"?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android" >     
    <item android:drawable="@color/c6" android:state_focused="false"  android:state_pressed="false"/>   
    <item android:drawable="@color/c1" android:state_focused="true"  android:state_pressed="false"/>   
    <item android:drawable="@color/c2" android:state_focused="true" android:state_pressed="true"/>   
    <item android:drawable="@color/c3" android:state_focused="false" android:state_pressed="true"/>   
</selector>

上面一个<selector>里面包含了4个<item>
<item>的android:drawable属性可以指定一个图片或一种颜色。重点是~后面2个属性:
android:state_focused--是否是焦点
android:state_pressed--是否被按住

关于这2个属性,我也在网上查过一些资料,千篇一律,讲不清楚,进过尝试才知道,其实很简单~~

<item android:drawable="@color/c6"android:state_focused="false"android:state_pressed="false"/>
当不是焦点,也没有被按下时,显示c6这个颜色

<item android:drawable="@color/c1"android:state_focused="true"android:state_pressed="false"/>
当是焦点,没有被按下时,显示c1这个颜色

<item android:drawable="@color/c2"android:state_focused="true"android:state_pressed="true"/>
当是焦点,同时被按下时,显示c2这个颜色

<item android:drawable="@color/c3"android:state_focused="false"android:state_pressed="true"/>
当不是焦点,却被按下时,显示c3这个颜色

看到这估计有些人就费解了,不是焦点,却被按下,会有这种状态吗?焦点是什么?开始我也疑惑,因为我用的是ME525,全触控的,而焦点只有在用方向键或滚轮控制时才会出现,如果用手直接点击这个按钮,它将直接进入按下状态,则它的按下状态是true,但它的焦点状态是false。如果用方向键操作,那么要按下一个按钮,首先必须把光标移动到按钮上,这时按钮的焦点状态是true,按下状态的false;这时再用确定键按下,他的焦点状态仍然的true,而按下状态变为true。

以上的这种设计,其实是考虑到手机操作的两种模式,一种是普通模式,一种是触摸模式。
普通模式就是先选中,再按下的键盘操作;而触摸模式就是用手直接去点击,这种模式下,按钮的焦点状态始终为false,(不知道文本框会不会还是这样~~)

还有一个值得一提的是,系统运行机制是从上到下来匹配合适的状态,再应用颜色,然后后面的将不再匹配~
网上有人说可以这么写:

<item android:drawable="@color/c6" />
<item android:drawable="@color/c1" android:state_focused="true"  android:state_pressed="false"/>
<item android:drawable="@color/c2" android:state_focused="true" android:state_pressed="true"/>
<item android:drawable="@color/c3" android:state_focused="false" android:state_pressed="true"/>

这样其实是不行的,结果测试,发现按钮一直是c6颜色。
改成下面的顺序就正常了:

<item android:drawable="@color/c1" android:state_focused="true"  android:state_pressed="false"/>
<item android:drawable="@color/c2" android:state_focused="true" android:state_pressed="true"/>
<item android:drawable="@color/c3" android:state_focused="false" android:state_pressed="true"/>
<item android:drawable="@color/c6" />

因为如果后面两个状态的条件都不加,系统每次都会无条件的通过这个<item>,放在第一位的话,后面的就被忽略了~~
这个顺序的改变,就证明了每个<item>从上到下依次匹配是运行机制~~

了解了这些,控制起来就格外的得心应手了~~

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值