$Android自定义控件在不同状态下的属性
在写代码的时候,有时候需要控件在不同状态下显示不同的外观,比如在按钮按下的时候要变颜色,EditText获取焦点时候边框要变颜色等。那么下面就来梳理一下这些是怎么实现的。
(一)按钮按下时候变颜色
1、在项目的drawable目录下创建selector_title_imagebutton_bg.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- title栏ImageButton按下去时候的颜色 -->
<item android:drawable="@drawable/LightBlue" android:state_pressed="true"/> <!-- title栏ImageButton正常时候的颜色 -->
<item android:drawable="@drawable/ThemeDefault"/> <!-- 注:LightBlue和ThemeDefault都是在color.xml文件中定义的drawable类型的颜色值 --> </selector>
2、在values目录下styles.xml文件中增加一个style项,如下:
<!-- 标题栏ImageButton的style -->
<style name="TitleIbStyle" parent="@android:style/Widget.ImageButton">
<item name="android:background">@drawable/selector_title_imagebutton_bg</item>
</style>
3、在布局xml文件中,创建ImageButton时只需设置其style属性为"TitleIbStyle"即可:
<ImageButton
android:id="@+id/title_base_left_ib"
style="@style/TitleIbStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp" />
(二)EditText获取焦点时候边框变颜色
1、在项目的drawable目录下新建一个selector_edittext_bg.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/et_pressed" android:state_focused="true"/>
<item android:drawable="@drawable/et_normal"/> <!-- 注:et_pressed和et_normal是drawable目录下两张相同大小、填充颜色都为白色但边框颜色不同的圆角矩形的png图片 --> </selector>
2、在values目录下styles.xml文件中增加一个style项,如下:
<!-- EditText的自定义风格 -->
<style name="MyEtStyle" parent="@android:style/Widget.EditText">
<item name="android:background">@drawable/selector_edittext_bg</item>
</style>
3、在布局xml文件中,创建EditText时只需设置其style属性为"MyEtStyle"即可:
<EditText
android:id="@+id/content_et"
style="@style/MyEtStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
(三)总结
通过上述方式,其实还可以实现很多种其他的自定义效果,有待进一步探索。
随机推荐
- 学习spring1--跟我一起学Spring 3(2)–开发环境配置
http://www.importnew.com/13185.html#spring 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所 ...
- 第一百九十二节,jQuery EasyUI 使用
jQuery EasyUI 使用 学习要点: 1.引入必要的文件 2.加载 UI 组件的方式 3.使用 easyload.js 智能加载 4.Parser 解析器 本节课重点了解 EasyUI 的两种 ...
- Servlet 调试
测试/调试 Servlet 始终是开发使用过程中的难点.Servlet 往往涉及大量的客户端/服务器交互,可能会出现错误但又难以重现. 这里有一些提示和建议,可以帮助您调试. System.out.p ...
- python django -1
VT Django是一款python的web开发框架 与MVC有所不同,属于MVT框架 m表示model,负责与数据库交互 v表示view,是核心,负责接收请求.获取数据.返回结果 t表示templa ...
- linux oracle配置开机启动
参考:http://jingyan.baidu.com/article/b2c186c8fe4306c46ef6ff16.html 先以root身份登录到linux系统, 1. 修改vi /etc/o ...
- 构造方法与构造块的执行顺序(区别于static)
小面试题:在类的实例化时,会调用类的构造块(类中的构造块)和构造方法,无论构造方法在前还是在后,都先执行构造块 class Person{ public Person(){ System.out.pr ...
- Core Services层
本文转载至 http://jingyan.baidu.com/article/cdddd41c57360853cb00e124.html Core Services层是系统很多部分的基础部分,也许应用 ...
- python 数学操作符
优先级从高到低 print("2 ** 3 = %d" % 2 ** 3) 2 ** 3 = 8print("7 % 2 = {}".format(7 % 2) ...
- Xtrabackup 使用方法
简介:Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品.本文测试使用的是1.3版本,X ...
- 关于webpack打包图片的路径问题
在webpack打包的时候,用css-loader的时候,在css文件里用的引用的背景的图片的时候,如果是url()...那么里面的路径不能用相对路径,得用绝对路径,而且必须是带http的,幸好,,, ...