android自定义样式大全:shape,selector,layer-list,style,动画全部内容
原文:http://keeganlee.me/post/android/20150830
以下摘取了部分内容:
shape
一般用shape定义的xml文件存放在drawable目录下,若项目没有该目录则新建一个,而不要将它放到drawable-hdpi等目录中。只需要在对应控件设置(bg_rectangle_with_stroke_dash.xml)
android:background="@drawable/bg_rectangle_with_stroke_dash"
四种类型
使用shape可以自定义形状,可以定义下面四种类型的形状,通过android: shape属性指定:
- rectangle: 矩形,默认的形状,可以画出直角矩形、圆角矩形、弧形等
- oval: 椭圆形,用得比较多的是画正圆
- line: 线形,可以画实线和虚线
- ring: 环形,可以画环形进度条
selector
有时候,不同状态下改变的不只是背景、图片等,文字颜色也会相应改变。而要处理这些不同状态下展示什么的问题,就要用selector来实现了。 一个<item/>包裹一个状态和对应的效果
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 当前窗口失去焦点时 --> <item android:drawable="@drawable/bg_btn_lost_window_focused" android:state_window_focused="false" /> <!-- 不可用时 --> <item android:drawable="@drawable/bg_btn_disable" android:state_enabled="false" /> <!-- 按压时 --> <item android:drawable="@drawable/bg_btn_pressed" android:state_pressed="true" /> <!-- 被选中时 --> <item android:drawable="@drawable/bg_btn_selected" android:state_selected="true" /> <!-- 被激活时 --> <item android:drawable="@drawable/bg_btn_activated" android:state_activated="true" /> <!-- 默认时 --> <item android:drawable="@drawable/bg_btn_normal" /> </selector>
而下面则是text_btn_selector.xml的代码,用于按钮的文本颜色:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 当前窗口失去焦点时 --> <item android:color="@android:color/black" android:state_window_focused="false" /> <!-- 不可用时 --> <item android:color="@android:color/background_light" android:state_enabled="false" /> <!-- 按压时 --> <item android:color="@android:color/holo_blue_light" android:state_pressed="true" /> <!-- 被选中时 --> <item android:color="@android:color/holo_green_dark" android:state_selected="true" /> <!-- 被激活时 --> <item android:color="@android:color/holo_green_light" android:state_activated="true" /> <!-- 默认时 --> <item android:color="@android:color/white" /> </selector>
Layer-List
使用layer-list可以将多个drawable按照顺序层叠在一起显示,像上图中的Tab,是由一个红色的层加一个白色的层叠在一起显示的结果
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 第一种加载方式 --> <!--<item android:drawable="@drawable/bg_tab_selected" android:state_checked="true" />--> <!-- 第二种加载方式 --> <item android:state_checked="true"> <layer-list> <!-- 红色背景 --> <item> <color android:color="#E4007F" /> </item> <!-- 白色背景,白色背景距离底部越远,漏出来的红色部分就越多 --> <!-- 效果就是看到的粗的红色的线 --> <item android:bottom="4dp" android:drawable="@android:color/white" /> </layer-list> </item> <item> <layer-list> <!-- 红色背景 --> <item> <color android:color="#E4007F" /> </item> <!-- 白色背景 --> <item android:bottom="1dp" android:drawable="@android:color/white" /> </layer-list> </item> </selector>
属性
- solid:设置形状填充的颜色
- padding:内容与形状边界的内间距
- gradient: 设置形状的渐变颜色,可以是线性渐变、辐射渐变、扫描性渐变
- corners: 设置圆角,只适用于rectangle类型
- stroke: 设置描边,可描成实线或虚线
- size:设置形状默认的大小,可设置宽度和高度
动画
- 视图动画的xml文件放于res/anim/目录下,,引用时为R.anim.filename。
- <animator>属性动画的xml文件则放于res/animator/目录下。用引用时为R.animator.filename
Style
- Android的样式一般定义在res/values/styles.xml文件中,其中有一个根元素<resource>,而具体的每种样式定义则是通过<resource>下的子标签<style>来完成,<style>通过添加多个<item>来设置样式不同的属性。
- 另外,样式是可以继承的,可通过<style>标签的parent属性声明要继承的样式,也可通过点前缀 (.) 继承,点前面为父样式名称,后面为子样式名称。点前缀方式只适用于自定义的样式,若要继承Android内置的样式,则只能通过parent属性声明。
- 样式的用法不只是用于单个View,也能用于Activity或整个Application,这时候需要在相应的<activity>标签或<application>标签里设置android:theme属性,引用的其实也是style,但一般称为主题。