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

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

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

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

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

   
     
       
       
       
       

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

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

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

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

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

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

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

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

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





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




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

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

 

你可能感兴趣的:(android)