当前位置:文档之家› android中selector背景选择器(全部属性)

android中selector背景选择器(全部属性)

浅谈android的selector背景选择器----------------------------------------------------Item顺序是有讲究的,条件限定越细致,则应该放到前面。

比如这儿如果把1,2行和3,4行的item交换,那么pressed的就永远无法触发了,因为有item已经满足条件返回了。

可以理解为代码中的if语句。

----------------------------------------------------关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法。

首先android的selector是在drawable/xxx.xml中配置的。

先看一下listview中的状态:把下面的XML文件保存成你自己命名的.xml文件(比如list_item_bg.xml),在系统使用时根据ListView中的列表项的状态来使用相应的背景图片。

drawable/list_item_bg.xml<?xml version="1.0" encoding="utf-8" ?><selector xmlns:android="/apk/res/android"><!-- 没有焦点时的背景图片--><item android:state_window_focused="false" android:drawable="@drawable/pic1" /><!-- 非触摸模式下获得焦点并单击时的背景图片--><item android:state_focused="true" android:state_pressed="true"android:drawable="@drawable/pic2" /><!-- 触摸模式下单击时的背景图片--><item android:state_focused="false" android:state_pressed="true"android:drawable="@drawable/pic3" /><!--选中时的图片背景--><item android:state_selected="true" android:drawable="@drawable/pic4" /><!--获得焦点时的图片背景--><item android:state_focused="true" android:drawable="@drawable/pic5" /><!-- 正常状态的item必须放在最后,否则无法生效--><!-- 默认时的背景图片--><item android:drawable="@drawable/pic1" /></selector>使用些xml文件:第一种是在listview中配置android:listSelector="@drawable/list_item_bg"或者在listview的item中添加属性android:background=“@drawable/list_item_bg"即可实现,或者在java代码中使用:Drawable drawable = getResources().getDrawable(R.drawable.list_item_bg);ListView.setSelector(drawable);同样的效果。

但是这样会出现列表有时候为黑的情况,需要加上:android:cacheColorHint="@android:color/transparent"使其透明。

其次再来看看Button的一些背景效果:android:state_selected是选中android:state_focused是获得焦点android:state_pressed是点击android:state_enabled是设置是否响应事件,指所有事件根据这些状态同样可以设置button的selector效果。

也可以设置selector改变button中的文字状态。

以下就是配置button中的文字效果:drawable/button_font.xml<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="/apk/res/android"><item android:state_selected="true" android:color="#FFF" /><item android:state_focused="true" android:color="#FFF" /><item android:state_pressed="true" android:color="#FFF" /><item android:color="#000" /></selector>Button还可以实现更复杂的效果,例如渐变啊等等。

drawable/button_color.xml<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="/apk/res/android"> <item android:state_pressed="true"><!-- 定义当button 处于pressed 状态时的形态。

--><shape><gradient android:startColor="#8600ff" /><stroke android:width="2dp" android:color="#000000" /><corners android:radius="5dp" /><padding android:left="10dp" android:top="10dp"android:bottom="10dp" android:right="10dp" /></shape></item><item android:state_focused="true"><!-- 定义当button获得focus时的形态--><shape><gradient android:startColor="#eac100" /><stroke android:width="2dp" android:color="#333333" color="#ffffff" /><corners android:radius="8dp" /><padding android:left="10dp" android:top="10dp"android:bottom="10dp" android:right="10dp" /></shape></item></selector>最后,需要在包含button的xml文件里添加两项。

假如是main.xml 文件,我们需要在<Button />里加两项。

android:focusable="true"android:backgroud="@drawable/button_color"这样当你使用Button的时候就可以甩掉系统自带的那黄颜色的背景了,实现个性化的背景,配合应用的整体布局非常之有用啊---------------------------------------------shape 使用-------------------------------------------------------------------------------------编写xml文件放到res/drawable-*/下面最基本的写法如下<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android"><gradient ---渐变android:startColor="#3A3C39"android:endColor="#181818"android:angle="270"/><corners android:radius="0dp" /></shape>使用方法:android:background="@drawable/shape_background_grey"<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android"><gradientandroid:startColor="#3A3C39"android:endColor="#181818"android:angle="270" ----角度/><corners android:radius="0dp"/></shape>使用方法:android:background="@drawable/shape_background_grey"其中android:angle="270" 代表方向,270表示从上到下,180表示从右到左,默认从左复杂一点的写法如下<shape xmlns:android="/apk/res/android"android:shape="rectangle"><!-- 实心--><solid android:color="#ff9d77"/><!-- 渐变--><gradientandroid:startColor="#ff8c00"android:endColor="#FFFFFF"android:angle="270" /><!-- 描边--><stroke//可设置虚线android:dashWidth="5dp"android:dashGap="3dp"android:width="2dp"android:color="#dcdcdc" /><!-- 圆角--><cornersandroid:radius="2dp" /><paddingandroid:left="10dp"android:top="10dp"android:right="10dp"android:bottom="10dp" /></shape><shape xmlns:android="/apk/res/android"><gradient android:angle="0" android:startColor="#FFdaf3fc"android:centerColor="#FFd4e9a9" android:endColor="#FFdaf3fc"/></shape><shape xmlns:android="/apk/res/android"android:shape="rectangle"><gradient android:type="radial" android:gradientRadius="250"android:startColor="#E9E9E9" android:endColor="#D4D4D4"/></shape><shape xmlns:android="/apk/res/android"><gradient android:angle="0" android:startColor="#FFdaf3fc"android:centerColor="#FFd4e9a9" android:endColor="#FFdaf3fc"/></shape>在这里要注意android:type="radial"类型的使用会有不同的效果android:centerColor="#FFd4e9a9" 通常这个也不是被人常用<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android"android:shape="rectangle"><gradient android:startColor="#509245" android:centerColor="#3e8532"android:endColor="#509245" android:type="linear" android:angle="90"android:centerX="0.5" android:centerY="0.5"/><padding android:left="7dp" android:top="7dp" android:right="7dp"android:bottom="7dp"/><corners android:radius="4dp"/></shape><?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android"android:shape="rectangle"><gradient android:startColor="#509245" android:centerColor="#3e8532"android:endColor="#509245" android:type="linear" android:angle="90"android:centerX="0.5" android:centerY="0.5"/><padding android:left="7dp" android:top="7dp" android:right="7dp"android:bottom="7dp"/><corners android:radius="4dp"/></shape>android:shape 配置的是图形的形式,主要包括矩形(rectangle)、椭圆形(oval)、线(line)、环(ring)等,上边代码为方形。

相关主题