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

    $.extend($.fn.tree.methods, { getImperfectCheck : function (jq) { var checked = jq.find("span.t ...

  2. Hibernate集合映射

    可以在Hibernate中映射持久类的集合元素. 您需要从以下类型之一声明持久类中的集合类型: java.util.List java.util.Set java.util.SortedSet jav ...

  3. OpenGL ES andoid学习————1

    package com.xhm.getaccount; import javax.microedition.khronos.egl.EGLConfig; import javax.microediti ...

  4. 《从零开始学Swift》学习笔记(Day 47)——final关键字

    原创文章,欢迎转载.转载请注明:关东升的博客 在类的定义中使用final关键字声明类.属性.方法和下标.final声明的类不能被继承,final声明的属性.方法和下标不能被重写. 下面看一个示例: f ...

  5. 1503 猪和回文(DP)

    1503 猪和回文 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一只猪走进了一个森林.很凑巧的是,这个森林的形状是长方形的,有 ...

  6. linux解压war包

    可以用unzip命令 unzip project.war -d project 这样就在当前目录下解压project.war到project目录里面,参数-d的意思是创建project目录 附:unz ...

  7. 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查

    内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...

  8. 关于org.apache.shiro.SecurityUtils.getSubject().getSession()

     Subject currentUser = SecurityUtils.getSubject();    Session session = currentUser.getSession();  s ...

  9. Distance matrix

    w https://en.wikipedia.org/wiki/Distance_matrix For example, suppose these data are to be analyzed, ...

  10. <2013 06 29> In Deutschland. Thinking in Mechanism, EE, CS, etc.

    一 在德国近一个月了,主要去了慕尼黑周边的几个景点,天鹅城堡啊,国王湖啊,然后就是在市区逛,玛丽安广场,伊萨河,英国公园,德意志博物馆... ... 总体的印象是非常好的,只是自己不怎么懂德语,但这里 ...