1:Selector

drawable的item中可以有以下属性: 
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_active=["true" | "false"]
android:state_checkable=["true" | "false"] 
android:state_checked=["true" | "false"] 
android:state_enabled=["true" | "false"] 
android:state_window_focused=["true" | "false"]

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_enabled="true" android:state_checked="true" android:state_pressed="true"android:drawable="@drawable/enabled_on_pressed" /><item android:state_enabled="true" android:state_checked="false" android:state_pressed="true"android:drawable="@drawable/enabled_off_pressed" /><item android:state_enabled="true" android:state_checked="true"android:drawable="@drawable/enabled_on" /><item android:state_enabled="true" android:state_checked="false"android:drawable="@drawable/enabled_off" /><item android:state_enabled="false" android:state_checked="true"android:drawable="@drawable/disabled_on" /><item android:state_enabled="false" android:state_checked="false"android:drawable="@drawable/disabled_off" />
</selector>

Item顺序是有讲究的,条件限定越细致,则应该放到前面。比如这儿如果把1,2行和3,4行的item交换,那么pressed的就永远无法触发了,因为有item已经满足条件返回了。可以理解为代码中的if语句。

2:Shape

<shape><!-- 实心 --><solid android:color="#ff9d77"/><!-- 渐变 --><gradientandroid:startColor="#ff8c00"android:endColor="#FFFFFF"android:angle="270" /><!-- 描边 --><strokeandroid:width="2dp"android:color="#dcdcdc" /><!-- 圆角 --><cornersandroid:radius="2dp" /><paddingandroid:left="10dp"android:top="10dp"android:right="10dp"android:bottom="10dp" /></shape>

solid:实心,就是填充的意思
android:color指定填充的颜色
gradient:渐变
android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。
另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。
stroke:描边
android:width="2dp" 描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp" 
android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。
corners:圆角
android:radius为角的弧度,值越大角越圆。
我们还可以把四个角设定成不同的角度,方法为:
<corners 
        android:topRightRadius="20dp"    右上角
        android:bottomLeftRadius="20dp"    右下角
        android:topLeftRadius="1dp"    左上角
        android:bottomRightRadius="0dp"    左下角
 />
这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。
还有网上看到有人说设置成0dp无效,不过我在测试中发现是可以的,我用的是2.2,可能修复了这个问题吧,如果无效的话那就只能设成1dp了。
padding:间隔

button_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true" ><shape><!-- 渐变 --><gradientandroid:startColor="#ff8c00"android:endColor="#FFFFFF"android:type="radial"android:gradientRadius="50" /><!-- 描边 --><strokeandroid:width="2dp"android:color="#dcdcdc"android:dashWidth="5dp" android:dashGap="3dp" /><!-- 圆角 --><cornersandroid:radius="2dp" /><paddingandroid:left="10dp"android:top="10dp"android:right="10dp"android:bottom="10dp" /></shape></item><item android:state_focused="true" ><shape><gradientandroid:startColor="#ffc2b7"android:endColor="#ffc2b7"android:angle="270" /><strokeandroid:width="2dp"android:color="#dcdcdc" /><cornersandroid:radius="2dp" /><paddingandroid:left="10dp"android:top="10dp"android:right="10dp"android:bottom="10dp" /></shape></item><item>       <shape><solid android:color="#ff9d77"/><strokeandroid:width="2dp"android:color="#fad3cf" /><corners android:topRightRadius="5dp"android:bottomLeftRadius="5dp"android:topLeftRadius="0dp"android:bottomRightRadius="0dp"/><paddingandroid:left="10dp"android:top="10dp"android:right="10dp"android:bottom="10dp" /></shape></item>
</selector>

运行效果如下图:

一般状态:

获得焦点状态:

按下状态:

Android Selector 与 Shape 基本用法相关推荐

  1. android设置背景颜色渐变,Android背景渐变色(shape,gradient)

    Android设置背景色可以通过在res/drawable里定义一个xml,如下: android:startColor="#FFF" android:endColor=" ...

  2. Android开发:shape和selector和layer-list的(详细说明)

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...

  3. Android常用的shape,selector,layer-list使用说明

    shape的优势,Android开发中,使用shape可以方便的帮我们画出背景,相对于png图片来说,使用shape可以减少安装包的大小,而且能够更好的适应不同的手机: 1.shape(Gradien ...

  4. Android Selector 用法

    此贴为转载 ,不是本人制作. Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计:(以在mylist_view.xml为例) ...

  5. [转]android selector 背景选择器

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

  6. Android Selector的简写

    在Android中,我们需要实现一个View的点击或选中样式的改变,大多数情况下我们都是使用drawable文件,也就是selector,shape等组成的资源文件.大致套路如下的常规写法: 常规写法 ...

  7. Android UI设计系统-android selector 开始自定义样式

    Selector的结构描述: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:a ...

  8. Android样式开发---shape

    Thanks to:转载自Keegan小钢 原文链接:http://keeganlee.me/post/android/20150830 一个应用,应该保持一套统一的样式,包括Button.EditT ...

  9. Android中使用shape来定义控件的显示属性

    参见:  http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6087.html  或者 http://kofi1122.blog.51cto.com/2 ...

最新文章

  1. iOS 开发音视频流[1]---FFmpeg
  2. linux shell 脚本攻略学习11--mkdir和touch命令详解
  3. TypeScript 里的 class field
  4. iOS框架介绍之coreImage
  5. servlet的执行过程
  6. 也说翟鸿燊忽悠的一面
  7. 程序员修神之路--问世间异步为何物?
  8. web加减乘除法c#_c# 两个数的加减乘除
  9. mysql 字段操作_Mysql:数据库操作、数据表操作、字段操作整理
  10. 【HDU】1695 GCD
  11. 实现斗地主洗牌、发牌、看牌
  12. 2月20日 阻尼牛顿法,拟牛顿法(Quasi-Newton Methods)及各种具体实现方法,共轭梯度法(Conjugate Gradient)
  13. [译] 为什么给设计定义 UX、UI、CX、IA、IxD 和其他类型的头衔是愚蠢的行为
  14. 从键盘输入5个学生每科分数,把分数保存到一个数组中,最后输出分数大于60分的成绩
  15. 基于stm32的车辆减速灯项目——MPU6050或ADXL345
  16. 从off-heap到Azul's Zing(JVM)
  17. Android手机录制屏幕及转GIF
  18. WIN10和MAC OS双系统,调整MAC os分区给WIN10系统扩C盘
  19. 下载Intell IDea
  20. 华中科技大学计算机学院有调剂名额吗,华中科技大学计算机学院2017考研调剂信息...

热门文章

  1. 笔记本电脑掉线该如何解决
  2. Java反射工具包reflections
  3. 可见光相机与红外相机标定
  4. 28335之定时器原理
  5. 手机APP分析平台项目(一)
  6. jquery三级联动模糊查询_js相关:jQuery实现三级联动效果
  7. Procast2013安装教程
  8. 双硬盘装linux系统安装教程,双硬盘安装XP和Ubuntu互不影响之简易方法
  9. GLFW实例介绍(2)
  10. 清明。。只是扫墓。。