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

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

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

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

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

上面一个里面包含了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颜色。
改成下面的顺序就正常了:

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

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

 

更多相关文章

  1. Android 按钮点击切换背景,同时修改文字颜色
  2. Android实现底部tabbar按钮突出效果
  3. Android WebView 和 手机后退按钮 的故事
  4. Android控件之利用selector自定义的带文字的图片按钮
  5. Android 8.0 SystemUI下拉状态栏快捷开关
  6. Android的按钮监听事件&自定义回调函数
  7. Android Alert Dialog解决点击按钮对话框不关闭的问题
  8. Android使用selector自定义按钮
  9. Android Nine Patch图片及按钮背景

随机推荐

  1. SQL Server 索引维护sql语句
  2. 远程连接局域网内的SQL Server 的方法
  3. AspNetPager分页控件 存储过程
  4. SQL Server自动生成日期加数字的序列号
  5. 一个有趣的SQL命题 用一条语句切换BIT型
  6. 数据库高并发情况下重复值写入的避免 字
  7. SQL SERVER 的SQL语句优化方式小结
  8. sql2005 create file遇到操作系统错误5拒
  9. SQL SERVER 删除重复内容行
  10. SQL Server 空值处理策略[推荐]