Android中selector的使用
第一种方法(强烈推荐)
方法:selector做遮罩,原图做background。
我们做按钮的时候经常需要用两个图片来实现按钮点击和普通状态的样式,这就需要提供两种图片,而且每个分辨率下还有多套图片,大大增加了apk的大小。

我们希望让这两张图片合二为一,而且还能实现两种或者多种状态,怎么做呢?我们首先建立一个圆形的selector,正常情况下是完全透明的,按下后透明度变小。
normal_bg_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="#21000000" />
</shape>
</item> <item>
<shape android:shape="oval">
<solid android:color="#00000000" />
</shape>
</item>
</selector>

然后只需要问美工拿一张图片就好了,比如这张:

关键的一步来了,现在我们需要把selector文件当作遮罩,然后用上面的蓝色icon作为bg,放到一个ImageButton中:

<ImageButton
android:layout_width="100dp"
android:layout_height="100dp" android:src="@drawable/normal_bg_selector"
android:background="@drawable/blue_btn_icon" />

最后只需要调整下padding就好了,如果你需要矩形的图片,就按照上面的方法建立一个矩形的遮罩即可。如果你们公司用的圆角矩形,直接问设计师要个圆角的标准就行,再建立一个selector文件吧。下面是最简单的原型和矩形的遮罩文件:
normal_oval_mask_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="#21000000" />
</shape>
</item> <item>
<shape android:shape="oval">
<solid android:color="#00000000" />
</shape>
</item>
</selector>

normal_rectangle_mask_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#21000000" />
</shape>
</item> <item>
<shape android:shape="rectangle">
<solid android:color="#00000000" />
</shape>
</item>
</selector>

第二种方法(不推荐)
当然我们还有另一种方法来实现这个效果,用的是layer-list。先放一个selector做的遮罩,然后在遮罩下面叠加一个button的icon。这样就做好button按下后的样式。
blue_btn_selector_layerlist.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/blue_btn_icon" />
<item android:drawable="@drawable/blue_btn_mask_shape" />
</layer-list>

现在我们有了按钮普通的样式和按钮按下的样式,之后就可以建立一个selector:
blue_button_bg_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item
android:state_pressed="true"
android:drawable="@drawable/blue_btn_selector_layerlist" /> <item
android:drawable="@drawable/blue_btn_icon" />
</selector>

最后就只需要在button的background设置这个blue_button_bg_selector.xml就行了。第二种方法明显就比较繁琐,需要多建立一个文件,没有模块化。

版权声明:本文为博主原创文章,未经博主允许不得转载。讨论QQ群:372702757 http://blog.csdn.net/wenwen091100304/article/details/49667293
引言
selector中文的意思选择器,在Android中常常用来作组件的背景,这样做的好处是省去了用代码控制实现组件在不同状态下不同的背景颜色或图片的变换。使用十分方便。
selector的定义
selector就是状态列表(StateList), 它分为两种,一种Color-Selector 和Drawable-Selector。
Color-Selector
color-selector 就是颜色状态列表,可以跟color一样使用,颜色会随着组件的状态而改变。文件的位置存储于
/res/color/filename.xml
- 1
在Java中使用是:R.color.filename
在XML中使用是:@[package]color/filename
语法
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="hex_color" //颜色值,#RGB,$ARGB,#RRGGBB,#AARRGGBB
android:state_pressed=["true" | "false"]//是否触摸
android:state_focused=["true" | "false"]//是否获得焦点
android:state_selected=["true" | "false"]//是否被状态
android:state_checkable=["true" | "false"]//是否可选
android:state_checked=["true" | "false"]//是否选中
android:state_enabled=["true" | "false"]//是否可用
android:state_window_focused=["true" | "false"] />//是否窗口聚焦
</selector>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
示例
在/res/color/文件夹下新建test_color_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
调用:
<Button
android:id="@+id/bt_about"
style="@style/Button_style"
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_margin="5dp"
android:textColor="@color/test_color_selector"
android:text="@string/about" />
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
效果:注意字体颜色的变化
Drawable-Selector
drawable-selector 是背景图状态列表,可以跟图片一样使用,背景会根据组件的状态变化而变化。文件存储于
/res/drawable/filename.xml
- 1
Java中调用:R.drawable.filename
XML中调用:@[package:]drawable/filename
语法
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize=["true" | "false"]//drawable的大小是否当中状态变化,true表示是变化,false表示不变换,默认为false
android:dither=["true" | "false"]//当位图与屏幕的像素配置不一样时(例如,一个ARGB为8888的位图与RGB为555的屏幕)会自行递色(dither)。设置为false时不可递色。默认true
android:variablePadding=["true" | "false"] >//内边距是否变化,默认false
<item
android:drawable="@[package:]drawable/drawable_resource"//图片资源
android:state_pressed=["true" | "false"]//是否触摸
android:state_focused=["true" | "false"]//是否获取到焦点
android:state_hovered=["true" | "false"]//光标是否经过
android:state_selected=["true" | "false"]//是否选中
android:state_checkable=["true" | "false"]//是否可勾选
android:state_checked=["true" | "false"]//是否勾选
android:state_enabled=["true" | "false"]//是否可用
android:state_activated=["true" | "false"]//是否激活
android:state_window_focused=["true" | "false"] />//所在窗口是否获取焦点
</selector>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
示例
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/button_bg_press" />
<item android:state_focused="true" android:drawable="@drawable/button_bg_press" />
<item android:state_pressed="true" android:drawable="@drawable/button_bg_press" />
<item android:drawable="@drawable/button_bg_normol" />
</selector>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
调用:
<Button
android:id="@+id/bt_about"
style="@style/Button_style"
android:background="@drawable/button_selector"
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_margin="5dp"
android:textColor="@color/test_color_selector"
android:text="@string/about" />
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
效果:注意button背景变化
总结
selector是一种很好的方式,实现View状态变化后背景与颜色变化的,可以省去很多逻辑代码,掌握了之后既可以省去很多Java代码,还能写一些漂亮的UI。
Android中selector的使用的更多相关文章
- 【转】 Android中selector的使用
引言 selector中文的意思选择器,在Android中常常用来作组件的背景,这样做的好处是省去了用代码控制实现组件在不同状态下不同的背景颜色或图片的变换.使用十分方便. selector的定义 s ...
- Android中Selector的用法(改变ListView和Button的默认背景)
Android中的Selector的用法 http://blog.csdn.net/shakespeare001/article/details/7788400#comments Android中的S ...
- Android中selector背景选择器
http://blog.csdn.net/forsta/article/details/26148403 http://blog.csdn.net/wswqiang/article/details/6 ...
- android中的selector背景选择器的用法
关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法. 首先android的selector是在 ...
- Android中的Selector的用法
转自: Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计: (以在mylist_view.xml为例) 1.创建mylist ...
- android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用
android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用,只要把Imageview的src给去掉就成了,src捕获了bac ...
- Android中的Selector的使用总结
Android中的Selector主要是用来改变ListView和Button控件等其他空的默认背景,其使用方法可以如下所示: 1.首先在res目录下drawable文件夹,新建一个comm_butt ...
- Android中Fragment和ViewPager那点事儿(仿微信APP)
在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...
- android 中resources管理
主要存在于res/value文件夹中 定义: dimen.xml:主要用于设置像素默认值 <resources> res/values/dimens.xml <dimen name= ...
随机推荐
- 快速构建一个简单的单页vue应用
技术栈 vue-cli webpack vux,vux-loader less,less-loader vue-jsonp vue-scroller ES6 vue-cli:一个vue脚手架工具,利用 ...
- python学习:设计一个算法将缺失的数字找出来。
算法题 已知整型数值 a[99], 包含的所有99个元素都是从1-100中随机取值,并且这99个数两两互不相等,也就是说从1到100这100个数字有99个在数值内,有一个缺失.请设计一个算法将缺失 ...
- Python自动化--语言基础3--字典、函数、全局/局部变量
字典 dict1 = {'name':'han','age':18,'class':'first'} print(dict1.keys()) #打印所有的key值 print(dict1.values ...
- mvc get image 500
mvc中get图片时报500错误 很奇怪,突然变500错误了,一番查找之后发现原来是因为mimeType重复定义的原因,吐血.. http://stackoverflow.com/questions/ ...
- http权威指南笔记
请求报文 响应报文GET /test/hi.txt HTTP/1.0 起始行 HTTP/1.0 200 OKAccept: text/* 首部 Content-type: text/plainAcce ...
- solr6.6教程-从mysql数据库中导入数据(三)
整理多半天的solr6.6,终于算是把solr6.6中配置数据库弄出来了,网上的文章千篇一律,各说个的,没有一篇统一覆盖solr6.6版本配置的 帖子,本章节我会把配置的一些注意事项一一列举,由于时间 ...
- Python数据结构之四——set(集合)
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦.下面将要继续什么呢?让我想想先~~~嗯,还是 ...
- 高通ASOC中的codec驱动
ASOC的出现是为了让codec独立于CPU,减少和CPU之间的耦合,这样同一个codec驱动就无需修改就可以匹配任何一款平台. 在Machine中已经知道,snd_soc_dai_link结构就指明 ...
- DxPackNet 2.视频截图和捕捉帧图片
在上一节的基础上 打开了摄像头后: 1.视频截图------调用 CatchBmp 方法即可获取当前帧的 bmp 图像, //调用截屏函数 获取当前图片 Bitmap bmp = camCaptur ...
- UVALive - 3027 Corporative Network (并查集)
这题比较简单,注意路径压缩即可. AC代码 //#define LOCAL #include <stdio.h> #include <algorithm> using name ...