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的功能非常灵活,它可以让各种组件的背景、前景随状态的改变而切换。

使用(Drawable)资源——StateListDrawable资源的更多相关文章

  1. StateListDrawable 资源

    StateListDrawable 用于组织多个 Drawable 对象.当使用 StateListDrawable 作为目标组件 的背景.前景图片时,StateListDrawable 对象所显示的 ...

  2. [C++] 将 mp3 等音乐资源以资源形式嵌入 exe 文件中

    引用:http://www.easyx.cn/skills/View.aspx?id=6 本文讲解怎样将 mp3 等音乐资源以资源形式嵌入 exe 文件中,并通过 mciSendString 调用.嵌 ...

  3. 将 mp3 等音乐资源以资源形式嵌入 exe 文件中

    引用:http://www.easyx.cn/skills/View.aspx?id=6 本文讲解怎样将 mp3 等音乐资源以资源形式嵌入 exe 文件中,并通过 mciSendString 调用.嵌 ...

  4. Spring MVC配置静态资源和资源包

    Spring MVC配置静态资源和资源包 本例映射:css目录: pom.xml <properties> <spring.version>4.3.5.RELEASE</ ...

  5. 十九、dbms_resource_manager(用于维护资源计划,资源使用组和资源计划指令)

    1.概述 作用:用于维护资源计划,资源使用组和资源计划指令;包dbms_resource_manager_privs用于维护与资源管理相关的权限. 2.包的组成 1).dbms_resource_ma ...

  6. java线程共享受限资源 解决资源竞争 thinking in java4 21.3

    java线程共享受限资源 解决资源竞争  具体介绍请參阅:thinking in java4 21.3 thinking in java 4免费下载:http://download.csdn.net/ ...

  7. 3、flink架构,资源和资源组

    一.flink架构 1.1.集群模型和角色 如上图所示:当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager.由 Client 提交任务给 JobMa ...

  8. 使用(Drawable)资源——LayerDrawable资源

    与StateListDrawable有点类似,LayerDrawable也可包含一个Drawable数组,因此系统将会按这些Drawable对象的数组顺序来绘制它们,索引最大的Drawable对象将会 ...

  9. 使用(Drawable)资源———AnimationDrawable资源

    AnimationDrawable代表一个动画. 下面以补间动画为例来介绍如何定义AnimationDrawable资源,定义补间动画的XML资源文件已<set.../>元素作为根元素,该 ...

随机推荐

  1. 【转】Build Your own Simplified AngularJS in 200 Lines of JavaScript

    原文:http://blog.mgechev.com/2015/03/09/build-learn-your-own-light-lightweight-angularjs/ Build Your o ...

  2. 1.2 selenium IDE录制脚本

    1.打开Firefox浏览器中 selenium IDE

  3. UIColor -colorWithAlphaComponent

    view.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.7]; //颜色透明度

  4. UIView的alpha、hidden、opaque 深入

    转载自:http://blog.csdn.net/wzzvictory/article/details/10076323 UIView的这几个属性让我困惑了好一阵子,通过翻看官方文档和stackove ...

  5. expected: file:///

    [java] java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.190.128:9000/user/hadoop/output/ ...

  6. 总结NAND FLASH控制器的操作

    初始化 NAND FLASH: 1)寄存器 NFCONT,用于开启 NAND FLASH控制器: 2)向寄存器NFCMD写入命令: 3)向寄存器NFADDR写入地址: 4)使用寄存器NFDATA进行数 ...

  7. FZU Problem 2029 买票问题(树状数组)

    当我看到题目是5秒的时候,压根没有想树状数组,一直奔着模拟队列去想了,最后也没搞定,赛后看到大神的题解才恍然大悟,原来如此,题目中有明显的暗示,求前n项和,骤然感叹,自己太low... 果然还是要多做 ...

  8. 转:WebDriver(Selenium2)模拟鼠标经过事件

    在自动化测试过程中,由于javascript的使用,我们常常需要点击一些鼠标经过显示的菜单等元素,这时需要触发该元素的鼠标经过事件.使用WebDriver有以下两种实现. 1.使用Action pub ...

  9. HDU 3715 Go Deeper

    二分答案 + 2-SAT判断 #include<cstdio> #include<cstring> #include<cmath> #include<vect ...

  10. Python3基础 使用list() 生成一个空列表

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...