原文链接:http://blog.csdn.net/jincf2011/article/details/6623634

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

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

先看一下listview中的状态:

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

drawable/list_item_bg.xml

XML/HTML代码

  1. <?xmlversion="1.0"encoding="utf-8"?>

  2. <selectorxmlns:android="http://schemas.android.com/apk/res/android">

  3. <!--默认时的背景图片-->

  4. <itemandroid:drawable="@drawable/pic1"/>

  5. <!--没有焦点时的背景图片-->

  6. <itemandroid:state_window_focused="false"

  7. android:drawable="@drawable/pic1"/>

  8. <!--非触摸模式下获得焦点并单击时的背景图片-->

  9. <itemandroid:state_focused="true"android:state_pressed="true"

  10. android:drawable="@drawable/pic2"/>

  11. <!--触摸模式下单击时的背景图片-->

  12. <itemandroid:state_focused="false"android:state_pressed="true"

  13. android:drawable="@drawable/pic3"/>

  14. <!--选中时的图片背景-->

  15. <itemandroid:state_selected="true"

  16. android:drawable="@drawable/pic4"/>

  17. <!--获得焦点时的图片背景-->

  18. <itemandroid:state_focused="true"

  19. android:drawable="@drawable/pic5"/>

  20. </selector>

设置ListView等控件的选择器方式:

第一种:是在 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/HTML代码

  1. <?xmlversion="1.0"encoding="utf-8"?>

  2. <selectorxmlns:android="http://schemas.android.com/apk/res/android">

  3. <itemandroid:state_selected="true"android:color="#FFF"/>

  4. <itemandroid:state_focused="true"android:color="#FFF"/>

  5. <itemandroid:state_pressed="true"android:color="#FFF"/>

  6. <itemandroid:color="#000"/>

  7. </selector>


Button还可以实现更复杂的效果,例如渐变啊等等。

复制到剪贴板XML/HTML代码

  1. drawable/button_color.xml

  2. <?xmlversion="1.0"encoding="utf-8"?>

  3. <selectorxmlns:android="http://schemas.android.com/apk/res/android">/

  4. <itemandroid:state_pressed="true">//定义当button处于pressed状态时的形态。

  5. <shape>

  6. <gradientandroid:startColor="#8600ff"/>

  7. <strokeandroid:width="2dp"android:color="#000000"/>

  8. <cornersandroid:radius="5dp"/>

  9. <paddingandroid:left="10dp"android:top="10dp"

  10. android:bottom="10dp"android:right="10dp"/>

  11. </shape>

  12. </item>

  13. <itemandroid:state_focused="true">//定义当button获得focus时的形态

  14. <shape>

  15. <gradientandroid:startColor="#eac100"/>

  16. <strokeandroid:width="2dp"android:color="#333333"color="#ffffff"/>

  17. <cornersandroid:radius="8dp"/>

  18. <paddingandroid:left="10dp"android:top="10dp"

  19. android:bottom="10dp"android:right="10dp"/>

  20. </shape>

  21. </item>

  22. </selector>


最后,需要在包含 button的xml文件里添加两项。假如是 main.xml 文件,

我们需要在<Button />里加两项。

android:focusable="true"

android:backgroud="@drawable/button_color"

这样当你使用Button的时候就可以甩掉系统自带的那黄颜色的背景了,实现个性化的背景,配合应用的整体布局非常之有用啊。

更多相关文章

  1. Android中使用Dialog风格弹出框的Activity
  2. Android设置Activity透明背景样式
  3. Android把activity设置为窗口样式怎么去掉标题
  4. Android学习第一天--Activity生命周期
  5. 浅谈android的selector背景选择器
  6. [整] Android(安卓)ListView 去除边缘阴影、选中色、拖动背景色
  7. 详解 Android(安卓)的 Activity 组件
  8. Android(安卓)ToggleButton Example--开关按钮
  9. StevGuo系列文章翻译之Android电源管理

随机推荐

  1. Android(安卓)布局优化之include与merge
  2. 【Tech-Android-View】Android中可以使用
  3. 第八章、理解Window和WindowManager
  4. Unable to execute dex: java.nio.Buffer
  5. android SystemUI 流程分析
  6. Android进阶 - 消息处理机制探索
  7. Android(安卓)Studio:layout-sw600dp文件
  8. Android系统架构介绍
  9. [置顶] android学习系列-短信发送器与电
  10. Android学习心得(五)——GOOGLE MAP