android手持设备selector多种状态编写

来源:互联网 发布:超级山猫直升机数据 编辑:程序博客网 时间:2024/05/03 08:04

android手持设备selector多种状态编写

年底了,最近一直忙着公司新产品的开发。说好的每个月至少发一篇的博文目标也没有做到,惭愧。因为这次是根据一款手持设备做app开发,遇到了自己以前只做触摸手机开发没有遇到的一些问题。本文主要是记录自己编写的 selector xml 文件。

  • 1.手持设备靓照
  • 2.触摸手机selector文件编写
  • 3.手持设备selector文件编写
  • 4.手持设备listview item selector文件编写
  • 5.RadioGroup中RadioButton selector文件编写
  • 6.总结

1.手持设备靓照

(1)第一款手持设备

这里写图片描述

(2)第二款手持设备

这里写图片描述

上面两张图片就是我目前使用到的两款手持设备。目前只针对第一张图片的设备做适配,所以第二张图片中的app布局暂时有点不规范,后面将会针对第二款设备进行适配工作。


2.触摸手机selector文件编写

在我们全触摸屏幕手机中常用的selector形式主要有两种:
1.包含两种状态,按下状态与普通状态;
2.包含三种状态,不可点击状态、当满足条件时可点击状态、当满足条件时按下状态;

<!-- 两种 按键效果--><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/normal" android:state_pressed="false"/>    <item android:drawable="@drawable/pressed" android:state_pressed="true"/></selector>
<!-- 三种 按键效果--><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/n" android:state_enabled="false"/> <item android:drawable="@drawable/y" android:state_enabled="true" android:state_pressed="false"/> <item android:drawable="@drawable/p" android:state_enabled="true" android:state_pressed="true"/></selector>

我们平时在全触摸手机中常用的selector就是以上两种,android:drawable=”“可以用图片素材,也可以用颜色值。android:state_enabled这个属性对应的是按键能否点击与不可点击,我们可以在控件的属性中定义,以可以用代码控制。


3.手持设备selector文件编写

在绝大多数的手持设备中均带有键盘,公司业务的要求整个app的操作几乎完全能用键盘操作。所以我在编写文件的时不仅要考虑到手直接触摸屏幕时selector状态的变化还要考虑到通过键盘移动时屏幕焦点的变化。在我使用到的第一款手持设备中,通过按键进入页面时焦点默认在屏幕的左上角。

注意
一:前提是在你的xml文件和代码中没有设置某个view获取焦点;
二:一个view能否获取焦点主要是看focusable属性,该属性可以通过xml和代码设置;
三:Button和EditText等默认是可以获取焦点,TextView和ImageView和RelativeLayout等默认是不可以获取焦点;

这里我使用到了两种类别的selector在手持设备中。
(1) 包含了通过键盘移动焦点时view的背景变化和通过屏幕触摸时view背景的变化;
(2)包含了通过键盘移动有焦点时和无焦点时view在被选中与未被选中的背景变化和通过屏幕触摸与否时view在选中与未被选中的背景变化;

<!-- 第一种类型 按键效果--><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/pw"     android:state_focused="true" android:state_pressed="true"/>    <item android:drawable="@drawable/pw"     android:state_focused="true" android:state_pressed="false"/>    <item android:drawable="@drawable/pw"     android:state_focused="false" android:state_pressed="true"/>    <item android:drawable="@drawable/bw"     android:state_focused="false" android:state_pressed="false"/></selector>
<!-- 第二种类型 按键效果--><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/ps"     android:state_focused="false" android:state_pressed="true" android:state_selected="true"/>    <item android:drawable="@drawable/op"     android:state_focused="false" android:state_pressed="true" android:state_selected="false"/>    <item android:drawable="@drawable/fb"     android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>    <item android:drawable="@drawable/bw"     android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>    <item android:drawable="@drawable/ps"     android:state_focused="true" android:state_pressed="true" android:state_selected="true"/>    <item android:drawable="@drawable/op"     android:state_focused="true" android:state_pressed="true" android:state_selected="false"/>    <item android:drawable="@drawable/ps"     android:state_focused="true" android:state_pressed="false" android:state_selected="true"/>    <item android:drawable="@drawable/op"     android:state_focused="true" android:state_pressed="false" android:state_selected="false"/></selector>

注意
在对Button使用android:state_selected属性时只能通过代码进行控制;


4.手持设备listview item selector文件编写

在android设备中listview有自带的selector状态,这种状态在手持设备中默认能使用,但是因为业务需求需要改变这种样式,所以就需要我们自定义listview item的 selector样式。
下面是实现 listview item selector样式的两种方式:
第一种:

<!-- 第一种类型 按键效果--><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <!-- 没有焦点时的背景图片 -->    <item android:drawable="@drawable/tt"android:state_window_focused="false"/>    <!-- 非触摸模式下获得焦点并单击时的背景图片 -->    <item android:drawable="@drawable/pt"android:state_focused="true"android:state_pressed="true"/>    <!-- 触摸模式下单击时的背景图片-->    <item android:drawable="@drawable/pt"android:state_focused="false"android:state_pressed="true"/>    <!--选中时的图片背景-->    <item android:drawable="@drawable/pt"android:state_selected="true"/>    <!--获得焦点时的图片背景-->    <item android:drawable="@drawable/pt"android:state_focused="true"/>    <!-- 默认时的背景图片-->    <item android:drawable="@drawable/tt"/></selector>

这种方式是通过搜索查询到的,我最初就用的这种方式,我当时遵循了典型的“拿来主义”,为了完成任务进度就没有多加思考。其实通过仔细思考我发现可以用第3点 手持设备selector文件编写中的第二种类型。
于是我将第3点中的第二种类型来替换,效果完全一样!
第二种:
请参考第3点中第二种类型。


5.RadioGroup中RadioButton selector文件编写

现在用RadioGroup中包含RadioButton来做菜单选项卡的方式很常见。当然以可以用LinearLayout中包含ImageView和TextView的方式,只不过这种方式不规范,不推荐使用。
对RadioButton的selector文件编写分为两部分:
(1)对android:drawableTo 的selector文件编写;
(2)对textColor的selector文件编写;

<!-- 对android:drawableTo 的selector文件编写--><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/tn" android:state_checked="false"/>    <item android:drawable="@drawable/tf" android:state_checked="true"/></selector>
<!-- 对textColor的selector文件编写--><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:color="@color/text" android:state_checked="false"/>    <item android:color="@color/text_blue" android:state_checked="true"/></selector>

注意
textColor的selector文件放在res/color文件夹下;


6.总结

android selector中可用的属性还有很多,有待我去发现。上面只是罗列出了部分属性组合而成的selector,以后会去尝试更多的组合。

Talk is cheap , show me your code !


本人才疏学浅,出错在所难免。如文中有错误的地方望指正,谢谢!
欢迎关注我的Github账号:https://github.com/tuzhao

0 0
原创粉丝点击