您的位置:首页 > 移动开发 > Android开发

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

2016-02-05 16:47 363 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息