在写代码的时候,有时候需要控件在不同状态下显示不同的外观,比如在按钮按下的时候要变颜色,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"

  

  (三)总结

  通过上述方式,其实还可以实现很多种其他的自定义效果,有待进一步探索。

随机推荐

  1. nginx 中location和root,你确定真的明白他们关系?

    最近公司开发新项目,web server使用nginx,趁周末小小的研究了一下,一不小心踩了个坑吧,一直404 not found!!!!!当时卡在location和root中,但是网上却比较少聊这方 ...

  2. 这是一篇markdown测试博客

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接 ...

  3. 切比雪夫多项式(Chebyshev Polynomials)

    切比雪夫多项式在逼近理论中有重要的应用.这是因为第一类切比雪夫多项式的根(被称为切比雪夫节点)可以用于多项式插值.相应的插值多项式能最大限度地降低龙格现象,并且提供多项式在连续函数的最佳一致逼近. 参 ...

  4. python requests.exceptions.ConnectionError

    今天遇到一个奇葩问题, 1.r.request.post(url) 2..print r. status_code 居然第一步就报错了,原因是url不正确,按道理应该可以走到第二步然后输入404的 i ...

  5. 【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住

    当点击完 finishbutton后,dbca 或者dbua hang住 来源于: DBCA/DBUA APPEARS TO HANG AFTER CLICKING FINISH BUTTON (文档 ...

  6. WPF TextBox 验证输入

    //验证输入为数字private void txt_time_KeyDown(object sender, KeyEventArgs e){ if (!((e.Key >= Key.D0 &am ...

  7. 进程 vs. 线程

    我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点. 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Work ...

  8. php的下载

    前言:你的坚持,终将美好! 今天给大家说一下,php的下载,由于php的下载本身就是一个压缩包,解压缩后即可使用.所以,解压缩的过程不再赘述. 第一步:在浏览器的地址栏输入:http://www.ph ...

  9. unintest基础1

    import unittest class Testfunc(unittest.TestCase): def testfunc(self): print('testfunc1') def testfu ...

  10. jmGraph:一个基于html5的简单画图组件

    jmGraph:一个基于html5的简单画图组件 特性: 代码书写简单易理解 面向对象的代码结构 对图形控件化 样式抽离 模块化:入seajs实现模块化开发 兼容性:暂只推荐支持html5的浏览器:i ...