*****
**自定义样式**
[TOC=6]
# 1. selector
~~~
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/play_press" ;/>
<item android:state_focused="true" android:drawable="@drawable/play_press" ;/>
<item android:drawable="@drawable/play" ;/>
</selector>
~~~
# 2. layer-list
使用layer-list可以将多个drawable按照顺序层叠在一起显示,默认情况下,所有的item中的drawable都会自动根据它附上view的大小而进行缩放,
layer-list中的item是按照顺序从下往上叠加的,即先定义的item在下面,后面的依次往上面叠放
例子:
~~~
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item >
<shape android:shape="rectangle" >
<solid android:color="#0000ff"/>
</shape>
</item>
<item android:bottom="25dp" android:top="25dp" android:left="25dp" android:right="25dp">
<shape android:shape="rectangle" >
<solid android:color="#00ff00" />
</shape>
</item>
<item android:bottom="50dp" android:top="50dp" android:left="50dp" android:right="50dp">
<shape android:shape="rectangle" >
<solid android:color="#ff0000" />
</shape>
</item>
</layer-list>
~~~
布局
~~~
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:background="@drawable/layer_list"/>
</LinearLayout>
~~~
效果图
![](https://box.kancloud.cn/9fb3f2ae6d99e83a2eff8ab23752f1c8_214x213.png)
红色item最后定义在最上方,绿色item中间,最先定义蓝色最下边
这里设置了android:bottom="50dp" android:top="50dp" android:left="50dp" android:right="50dp"属性
android:top="50dp";表示该item上边以ImageView上边界往里面缩了50dp
android:bottom="50dp"表示该item下边以ImageView下边界往里面缩了50dp
android:left="50dp";表示该item左边以ImageView左边界往里面缩了50dp
android:right="50dp";表示该item右边以ImageView右边界往里面缩了50dp
android:bottom="25dp" android:top="25dp" android:left="25dp" android:right="25dp"类似
layer-list给指定view实现三面边框
~~~
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item >
<shape android:shape="rectangle" >
<solid android:color="#ff0000"/>
</shape>
</item>
<item android:bottom="2dp" android:top="2dp" android:right="2dp">
<shape android:shape="rectangle" >
<solid android:color="#ffffff" />
</shape>
</item>
</layer-list>
~~~
布局
~~~
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="150dp"
android:layout_height="50dp"
android:background="@drawable/border"
android:layout_gravity="center"
android:orientation="vertical"
>
</LinearLayout>
</LinearLayout>
~~~
效果图
![](https://box.kancloud.cn/83f0fee3e8491e084a109ac4376758fd_197x71.png)
**实现带阴影的按钮效果:**
![](https://box.kancloud.cn/d81f6b63229e93633f4dfd38ceb5947f_1440x628.png)
代码:
~~~
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<!-- 灰色阴影 -->
<layer-list>
<item
android:left="2dp"
android:top="4dp">
<shape>
<solid android:color="@android:color/darker_gray" />
<corners android:radius="4dp" />
</shape>
</item>
<!-- 红色前景 -->
<item
android:bottom="4dp"
android:right="2dp">
<shape>
<solid android:color="#FF0000" />
<corners android:radius="4dp" />
</shape>
</item>
</layer-list>
</item>
<item>
<!-- 灰色阴影 -->
<layer-list>
<item
android:left="2dp"
android:top="4dp">
<shape>
<solid android:color="@android:color/darker_gray" />
<corners android:radius="4dp" />
</shape>
</item>
<!-- 白色前景 -->
<item
android:bottom="4dp"
android:right="2dp">
<shape>
<solid android:color="#FFFFFF" />
<corners android:radius="4dp" />
</shape>
</item>
</layer-list>
</item>
</selector>
~~~
## 3. 样式的使用
selector、layer-list、shpe
在style中定义样式
配置样式的地方
Application整个app
Activity单独的Activity
- 班规
- 第一单元 Git
- 1.1 Git简介
- 1.2 Git安装
- 1.3 版本控制
- 1.4 远程仓库
- 1.5 分支管理
- 1.6 Git命令总结
- 1.7 在Android Studio中使用Git
- 第一单元 作业
- 第二单元 项目立项
- 2.1 需求文档
- 2.2 原型图
- 2.3 接口文档
- 2.4 项目实现
- 2.5 制定开发计划
- 第二单元 作业
- 第三单元 MVP搭建项目框架
- 3.1 代码架构模式
- 3.2 普通方式写代码
- 3.3 使用MVC重构代码
- 3.4 使用MVP重构代码
- 3.5 使用接口提高代码通用性
- 3.6 内存泄漏
- 3.7 使用契约统一管理接口
- 第三单元 作业
- 第四单元 MVP架构优化
- 4.1 MVP基类封装与泛型应用
- 4.3 BaseActivity的封装
- 第五单元 Volley网络框架
- 5.1 Volley网络框架
- 第六单元 Glide实现图片异步加载
- 6.1 开始使用
- 6.2 占位符
- 6.3 Glide缓存
- 6.4 GlideGifVideo与色彩模式
- 第七单元 传统屏幕适配
- 7.1 相对布局
- 7.1 权重
- 7.3 .9Patch
- 7.4 dimens适配
- 7.5 国际化
- 7.6 shape实现自定义样式
- 7.7 自定义样式
- 7.8 沉浸式状态栏
- 第八单元 RecyclerView
- 8.1 RecycleView
- 第九单元 自定义View
- 第十单元 自定义View实战
- 第十一单元 自定义View进阶
- 第二十单元 属性动画
- 第十三单元 异常捕获机制
- 第十四单元 原生登录、注册模块
- 第十五单元 第三方登录、分享、统计
- 第十六单元 HTML5新特性
- 第十七单元 CSS3新特性
- 第十八单元 WebView与JS交互
- 第一周周考
- 第二周周考
- 第三周周考
- 月考