前言

  在开发一个应用程序过程中不可避免的要去修改组件的样式,比如按钮、输入框等。现在就看下如何通过Seletor实现样式的自定义。先看下简单的效果对比

aaarticlea/png;base64,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" alt="" />

概要实现

  首先写这个Selector XML文件,叫做button_selector,放到了drawable文件夹下,大概内容如下所示

  

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按下状态 -->
<item android:state_pressed="true">
<shape >
<!-- 边框颜色 -->
<stroke android:width="1dip" android:color="#728ea3" />
<!-- 背景颜色 -->
<solid android:color="#FFFFcc" />
</shape> </item>
<!-- 默认状态 -->
<item>
<shape>
<!-- 边框颜色 -->
<stroke android:width="1dip" android:color="#728ea3" />
<!-- 背景颜色 -->
<solid android:color="#FFFFFF" />
</shape>
</item> </selector>

  然后为该按钮设置background属性:@drawable/button_selector,如下所示

  

<Button
android:id="@+id/btnSelector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_selector"
android:text="Selector演示"
/>

  这样自定义样式就成功的应用到了这个按钮上了。

Selector

  先来看下官方描述:

  You can describe the state list in an XML file. Each graphic is represented by an <item> element inside a single <selector> element. Each <item> uses various attributes to describe the state in which it should be used as the graphic for the drawable.

  意思是说:你可以用一个XML文件来描述状态列表。在唯一的selector节点下,用item来描述每一种状态。每一个item通过不同的属性来标识用于哪种属性。

  下面就看下item的具体属性

  android:drawable:引用一个drawable资源

  android:state_pressed:Boolean值,如果设置为true则代表用于对象在被按下的时候

  android:state_focused:Boolean值,如果设置为true则代表用于对象在获得焦点的时候

  android:state_hovered:Boolean值,如果设置为true则代表用于对象在hover状态的时候

  android:state_selected:Boolean值,如果设置为true则代表用于对象在选中的时候

  android:state_checkable:Boolean值,如果设置为true则代表用于对象允许选中的时候

  android:state_checked:Boolean值,如果设置为true则代表用于对象被选中的时候

  android:state_enabled:Boolean值,如果设置为true则代表用于对象可用的时候(响应触摸或点击事件)

  android:state_activated:Boolean值,如果设置为true则代表用于对象被激活的时候

  android:state_window_focused:Boolean值,如果设置为true则代表用于窗体获得焦点的时候

  通过以上属性,就可以灵活的定制出期望的结果了,这次例子只是展示了android:state_pressed这一种状态的效果。Selector代码为上文提到的button_selector。效果如下所示

  aaarticlea/png;base64,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" alt="" />

简单分析

  再来看下press的那个item内容。

  

<!-- 按下状态 -->
<item android:state_pressed="true">
<shape >
<!-- 边框颜色 -->
<stroke android:width="1dip" android:color="#728ea3" />
<!-- 背景颜色 -->
<solid android:color="#FFFFcc" />
</shape> </item>

  上图所示的按下效果是通过shape标签来完成的。这个标签用来指定背景的样式,由于这次重点介绍Selector的用法,Shape的用法就不过多解释了,只是把代码中出现的标签做下简单说明。

  stroke:用来设定背景边框的样式,可以去定义它的宽度(width),颜色(color),是否为虚线展示等等

  solid:用来设定背景颜色

后记

  这篇文字只是简单的介绍了下Selector的大体用法,具体的灵活使用可以构造出很强大的显示效果。

  原文地址:http://www.cnblogs.com/luoaz/p/3764784.html

  完整Demo:https://github.com/xiaoai-opensource/Selector

solid 

Android:自定义控件样式(Selector)的更多相关文章

  1. android自定义样式大全:shape,selector,layer-list,style,动画全部内容

    原文:http://keeganlee.me/post/android/20150830 以下摘取了部分内容: shape 一般用shape定义的xml文件存放在drawable目录下,若项目没有该目 ...

  2. Android中的Selector的用法

    转自: Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计: (以在mylist_view.xml为例) 1.创建mylist ...

  3. Android自定义控件 开源组件SlidingMenu的项目集成

    在实际项目开发中,定制一个菜单,能让用户得到更好的用户体验,诚然菜单的样式各种各样,但是有一种菜单——滑动菜单,是被众多应用广泛使用的.关于这种滑动菜单的实现,我在前面的博文中也介绍了如何自定义去实现 ...

  4. android studio样式文件汇总

    android studio样式文件汇总:shape.Theme|styles .selector 1:shape shape用于设定形状,有6个子标签,各属性如下: res/drawable/sty ...

  5. Android中的Selector的使用总结

    Android中的Selector主要是用来改变ListView和Button控件等其他空的默认背景,其使用方法可以如下所示: 1.首先在res目录下drawable文件夹,新建一个comm_butt ...

  6. Android shape与selector标签使用

    原文地址:Android shape与selector标签使用 Android中提供一种xml的方式,让我们可以自由地定义背景,比较常用的就是shape标签和selector标签 shape shap ...

  7. Android自定义控件之自定义ViewGroup实现标签云

    前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...

  8. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  9. Android自定义控件之自定义属性

    前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...

  10. Android自定义控件之基本原理

    前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...

随机推荐

  1. T-SQL 之 多表联合更新

    1. sqlite 多表更新方法 UPDATE tA SET col1=tB.col1 FROM tableA tA INNER JOIN tableB tB ON tA.col2=tB.col2 这 ...

  2. Operation与GCD的不同

    最大并发数: 什么是并发数? 同时执行的任务数.比如同时开启三个线程执行三个任务,并发数就是3. 最大并发数相关的方法: -(NSInteger)maxConcurrentOperationCount ...

  3. 安装 vsftpd

    (1)安装vsftpdsudo apt-get install vsftpd (2)配置sudo vi /etc/vsftpd.conf #anonymous_enable=YESlocal_enab ...

  4. 机房收费系统之处理流程图与DFD图

    一直想把自己画的图拿出来与大家分享,不过说来惭愧,一是图还没画完,二是图画的确实不咋地, 对于机房收费系统还是感到混乱,图画的不好大家多多指正. 系统处理流程图: DFD图

  5. React Native学习-将 'screen', 'window' or a view生成图片

    https://github.com/facebook/react-native/commit/ac12f986899d8520527684438f76299675dc0daa 这是react-nat ...

  6. Windows重新建立图标缓存

    有的时候,快捷方式的图标会因各种优化软件而变得面目全非,这时就需要重新建立图标缓存 新建一个文本文档,把文件的后缀名修改成.bat 的例如 icon.bat 在里面填写下面的内容: rem 关闭exp ...

  7. IOS的一些尺寸

    iPhone或iTouch的宽为320像素,高为480像素, 状态栏高为20像素 toobar高为44像素 tabbar高为49像素 导航栏高为44像素 iphone分辨率参数 型号 屏幕尺寸 分辨率 ...

  8. Differential Geometry之第四章标架与曲面论的基本定理

    第四章.标架与曲面论的基本定理 1.活动标架 2.自然标架的运动方程 爱因斯坦求和约定(Einstein summation convention) 3.曲面的结构方程 4.曲面的存在唯一性定理 5. ...

  9. Spring事务传递性探讨

    本篇主要讨论下面几点获取[下载地址]  : 一: Spring 事务的传递性介绍 二: 第三方调用含有事务的Service抛异常方法探讨 一: Spring 事务的传递性介绍 事务传播行为,所谓事务的 ...

  10. SignalR 简介

    SignalR 简介 由帕特里克 · 弗莱彻|2013 年 2 月 27 日 英文原文地址:http://www.asp.net/signalr/overview/getting-started/in ...