第二十二章 样式与主题(与二十三章 xml drawable合并)
样式
<style name="BeatBoxButton" >
<item name="android:background">@drawable/button_beat_box</item>
</style>
<style name="BeatBoxButton.Strong" >
<item name="android:textStyle">bold</item>
</style>
主题
- 主题是样式的升级版, 可以为所有相同组件统一定制.
- 使用方法:
- 通过层层递增的方法向上查找, 找到父类中的属性
- 通过名称尝试覆盖相应的属性作为尝试(使用parent )
1.如果是资源, 可以直接在主题中覆盖并修改属性
<item name="android:windowBackground">@color/soothing</item>
2.如果是样式, 继承相应的样式并修改其中的属性. 在主题中同时进行覆盖
查看到的父类是:
<!-- Button styles -->
<item name="buttonStyle">@style/Widget.AppCompat.Button</item>
<item name="buttonStyleSmall">@style/Widget.AppCompat.Button.Small</item>
<item name="android:textAppearanceButton">@style/TextAppearance.AppCompat.Widget.Button</item>
- 使用
<item name="buttonStyle">@style/BeatBoxButton</item>
<style name="BeatBoxButton" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/button_beat_box</item>
</style>
- 不需要在组件中进行引用.
- 如果想在组件中引用主题, 可以采用xml或代码两种方法
1.android:background"?attr/colorAccent
2.代码方式较为麻烦. P367
XML drawable
- 凡是在屏幕上绘制的东西都可以叫
drawable
, 比如抽象图形, Drawable
类的子类代码, 位图图像等. xml drawable
有三类子类:
1.shape drawable
: 定义的样式, 有六种属性(stroke, solid等)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="@color/dark_blue"/>
</shape>
state list drawable
指向不同的资源文件, 做出选择. 支持按下, 禁用, 聚焦, 激活
等状态
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_button_beat_box_pressed"
android:state_pressed="true"/>
<item android:drawable="@drawable/ic_button_beat_box_default"/>
</selector>
layer list drawablw
能做出层级的感觉
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="@color/red"/>
</shape>
</item>
<item>
<shape
android:shape="oval">
<stroke
android:width="4dp"
android:color="@color/dark_red"/>
</shape>
</item>
</layer-list>
相关小记
- 使用颜色资源, 可以在一处定义各种颜色值, 然后在整个应用里引用
- 可以为应用启动图标准备不同的匹配像素, 并放在
mipmap
目录中, 其他图片都放在drawable
目录中 9-patch
的使用:
1.将.png
格式的图片文件名改为.9.patch
2.对于九宫格中的区域, 规则是2, 4, 6, 8做一维单侧拉伸, 5做二维拉伸. 其余地方不做拉伸
挑战练习
- 去掉按下按钮的阴影