StateListDrawable用于组织多个Drawable对象。当使用StateListDrawable作为目标组件的背景、前景图片时,StateListDrawable对象所显示的Drawable对象会随目标组件状态的改变而自动切换。

定义StateListDrawable对象的XML文件的根元素为<selector.../>,该元素可以包含多个<item.../>元素,该元素可指定如下属性。

  • android:color或android:drawable:指定颜色或Drawable对象。
  • android:state_xxx:指定一个特定状态。

例如如下语法格式:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 指定特定状态下的颜色 -->
<item android:state_pressed=["true"|"false"] android:color="hex_color" ></item> </selector>
表6.3 StateListDrawable支持的状态
 属性值          含义
 android:state_active  代表是否处于激活状态
 android:state_checkable  代表是否处于可勾选状态
 android:state_checked  代表是否处于可勾选状态
 android:state_endabled  代表是否处于可用状态
 android:state_first  代表是否处于开始状态
 android:state_focused  代表是否处于已得到焦点状态
 android:state_last  代表是否处于结束状态
 android:state_middle  代表是否处于中间状态
 android:state_pressed 代表是否处于已被按下状态 
 android:state_selected  代表是否处于已被选中状态
 android:state_window_focused 代表是否窗口已得到焦点状态 

实例:高亮显示正在输入的文本框

        前面知道,使用EditText时可指定一个android:textColor属性,该属性用于指定文本框的文字颜色。前面介绍该属性时总是直接给它一个颜色值,因此该文本框的文字颜色总是固定的。借助于StateListDrawable对象,可以让文本框的文字颜色随文本框的状态动态改变。

为本系统提供如下Drawable资源文件。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 指定获取焦点时的颜色 -->
<item android:state_focused="true" android:color="#f44" ></item>
<!-- 指定失去焦点时的颜色 -->
<item android:state_focused="false" android:color="#000"></item>
</selector>

上面的资源文件中指定了目标组件得到焦点、失去焦点时使用不同的颜色,接下来可以在定义EditText时使用该资源。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<!-- 使用StateListDrawable资源 -->
<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@drawable/my_image"
/>
<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@drawable/my_image"
/>
</LinearLayout>

该应用的Java程序代码不需任何修改,只要显示该界面布局即可。运行该程序将看到如图6.3所示的界面。

通过使用StateListDrawable不仅可以让文本框文字的颜色随文本框状态的改变而切换,也可以让按钮的背景图片随按钮状态的改变而切换。实际上StateListDrawable的功能非常灵活,它可以让各种组件的背景、前景随状态的改变而切换。

最新文章

  1. HIVE教程
  2. STM32之PWM波形输出配置总结
  3. 同一内网不能网段ping 不通
  4. HDOJ 1690
  5. WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计
  6. Visual Studio 2015 开发MVC4出现错误
  7. ps 网页配图设计
  8. 思考的工作方式——计划经济or市场经济
  9. android 有效载荷大图,避OOM
  10. CSS预处理器 Less Sass,Scss 编译 Sourcemap调试
  11. 照着例子学习protobuf-python
  12. 【转载】 Java:按值传递还是按引用传递详细解说
  13. 3D模型展示以及体积、表面积计算
  14. Django+xadmin打造在线教育平台(八)
  15. Linux Swap交换分区探讨
  16. Android测试(四)——内容供应器泄露
  17. 批量监测dns是否可用脚本,不可用时并切换
  18. CentOS 添加 Oracle YUM 源
  19. New Game! (最短路+建图)
  20. css边框内凹圆角,解决优惠券的边框问题

热门文章

  1. List转DataSet
  2. 搭建App主流框架_纯代码搭建(OC)
  3. ARM指令集学习总结-转载
  4. Python3基础 定义无参数无返回值函数 调用会输出hello world的函数
  5. Fastjson简单使用方法
  6. Ubuntu安装pycharm
  7. 读 《我为什么放弃Go语言》 有感
  8. PHP中对mysql预编译查询语句的一个封装
  9. Cocos2dx 学习笔记整理----开发环境搭建
  10. CSDN泄漏数据完整分析