资源
- 利用selector设置按钮不同状态下的背景图片
- android Shape全解析——再也不担心包size了
- Android中shape属性详解
- Android开发:shape和selector和layer-list的
- shape和selector的结合使用
- 无需自定义View,彻底解放shape,selector吧 鸿阳推荐
- 不要头脑一热就去自定义View 郭神推,一些列Drawable介绍。
selector
重点内容
默认的item必须放到最后
属性
android:state_enabled: //设置触摸或点击事件是否可用状态,一般只在false时设置该属性,表示不可用状态
android:state_pressed: //设置是否按压状态,一般在true时设置该属性,表示已按压状态,默认为false
android:state_selected: //设置是否选中状态,true表示已选中,false表示未选中
android:state_checked: //设置是否勾选状态,主要用于CheckBox和RadioButton,true表示已被勾选,false表示未被勾选
android:state_checkable: //设置勾选是否可用状态,类似state_enabled,只是state_enabled会影响触摸或点击事件,而state_checkable影响勾选事件
android:state_focused: //设置是否获得焦点状态,true表示获得焦点,默认为false,表示未获得焦点
android:state_window_focused: //设置当前窗口是否获得焦点状态,true表示获得焦点,false表示未获得焦点,例如拉下通知栏或弹出对话框时,当前界面就会失去焦点;另外,ListView的ListItem获得焦点时也会触发true状态,可以理解为当前窗口就是ListItem本身
android:state_activated: //设置是否被激活状态,true表示被激活,false表示未激活,API Level 11及以上才支持,可通过代码调用控件的setActivated(boolean)方法设置是否激活该控件
android:state_hovered: //设置是否鼠标在上面滑动的状态,true表示鼠标在上面滑动,默认为false,API Level 14及以上才支持
常用设置
一般设置,如下四个属性就能满足大部分场景。(一般,第一和最后两个属性就够,部分机型不显示,加上另外两个才显示)
<item android:drawable="@drawable/solid_stroke_pressed" android:state_focused="true" />
<item android:drawable="@drawable/solid_stroke_pressed" android:state_selected="true" />
<item android:drawable="@drawable/solid_stroke_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/solid_stroke_normal" />
shape
重点内容
根属性
android:shape="rectangle|line|oval|ring" //分别为矩形、线、椭圆、环。默认为矩形rectangle
android:dither="false|true" //将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为“false”时则停用抖动。默认值为 true。
android:innerRadius="integer" // shape为ring时可用,内环半径
android:innerRadiusRatio="float" // shape为ring时可用,内环的厚度比,即环的宽度比表示内环半径,默认为3,可被innerRadius值覆盖
android:thickness="integer" // shape为ring时可用,环的厚度
android:thicknessRatio="float" // shape为ring时可用,环的厚度比,即环的宽度比表示环的厚度,默认为9,可被thickness值覆盖
android:tint="color" // 给shape着色
android:tintMode="src_in|src_atop|src_over|add|multiply|screen" // 着色类型
android:useLevel="false|true" // 较少用,一般设为false,否则图形不显示。为true时可在LevelListDrawable使用
android:visible="false|true" //是否可见
corners(圆角)
<corners
android:radius="3dp" //圆角度数
android:topLeftRadius="3dp" //左上圆角度数
android:topRightRadius="3dp" //右上圆角度数
android:bottomLeftRadius="3dp" //左下圆角度数
android:bottomRightRadius="3dp" //右上圆角度数
/>
gradient(渐变)
android:type="linear|radial|sweep" //线性|放射性|扫描性
android:angle="integer" //渐变颜色的角度。45的倍数,0度时从左往右渐变,角度方向逆时针。type为linear时有效。
android:startColor="color" //开始颜色
android:centerColor="color" //中间颜色
android:endColor="color" //结束颜色
android:centerX="float" //设置渐变中心的X坐标,取值区间[0,1],type不为linear
android:centerY="float" //设置渐变中心的Y坐标,取值区间[0,1],type不为linear
android:gradientRadius="integer" //渐变色半径,type为radial时必须配
android:useLevel="true|false" // 较少用,一般设为false,否则图形不显示。为true时可在LevelListDrawable使用
stroke
android:color="color" // 描边的颜色
android:width="integer" // 描边的宽度
android:dashGap="integer" // 虚线间隔
android:dashWidth="integer" // 虚线宽度
solid(填充)
android:color="color" // shape的填充色
size(大小)
android:width="300dp"
android:height="100dp"
padding(边距)
常用属性