《Android编程权威指南》之样式与主题篇(一)
《Android编程权威指南》第 21 章第一篇,主要就是给 BeatBox 界面重定制,内容不多,将学习到 Android 主题和样式相关的知识。
一、颜色资源
颜色资源通常统一放在 res/values/colors.xml 文件中进行管理,整个应用对它进行引用。
定义几种颜色颜色可以从左边的小正方形实时看到,还挺方便。通常项目中会定义各种色值,还有黑夜模式的色值,会放另外一个 -night 的文件夹中的 color.xml,用同一个名字,这样主题切换到暗黑模式就自动变化引用的色值了。跟前面做国际化方式类似做此功能。
二、样式
样式是能够应用于视图部件的一套属性。存放在 res/values/styles.xml 中。先添加个新样式 BeatBoxButton。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="BeatBoxButton">
<item name="android:background">@color/dark_blue</item>
</style>
</resources>
样式可以为很多控件共用,更改属性时,只修改公共样式定义即可。
然后去给 Button 添加样式。
style="@style/BeatBoxButton"
跑起来实际上依然是丑丑的,问题不大,就是为了学习嘛。
样式继承
样式也支持继承。一个样式能继承并覆盖其他样式的属性。
比如用命名的方式继承:
<style name="BeatBoxButton.Strong">
<item name="android:textStyle">bold</item>
</style>
或者是指定父样式的方式继承:
<style name="StrongBeatBoxButton" parent="@style/BeatBoxButton">
<item name="android:textStyle">bold</item>
</style>
然后继续给 Button 设置一下体验一下。
三、主题
主题可看作样式的进化加强版,主题属性会应用于整个应用。
打开 manifest 文件可以看到应用默认设置的主题:
manifesttheme 指向地方:
theme主题实际也是一种样式,可见此处我的默认的主题继承了 Theme.MaterialComponents.DayNight.DarkActionBar,想要深入了解属性就继续按住 Command(Ctrl)跳转进入即可。
AppCompat 库自带三大主题:
- Theme.AppCompat——深色主题。
- Theme.AppCompat.Light——浅色主题。
- Theme.AppCompat.Light.DarkActionBar——带深色工具栏的浅色主题。
大概目前我的项目比书中要新一点,所以默认是 MaterialComponents 库主题,深色模式或者是亮色模式命名规则基本一致。
有关 MaterialComponent 的深色主题背景 详情请参考:
https://material.io/develop/android/theming/dark
四、添加主题颜色
可自行改成自己想要的颜色啦。
colorPrimary 属性主要用于应用栏。
colorPrimaryDark 用于屏幕顶部的状态栏。
注意,只有 Lollipop 以后的系统支持状态栏主题色。对于之前的系统,无论指定什么主题色,状态栏都是不变的黑底色。
项目中常常有需求需要沉浸式的状态栏,有个沉浸式状态栏实现开源项目推荐:
https://github.com/gyf-dev/ImmersionBar
貌似挺不错的。目前我在项目中也是用此方案来解决沉浸式状态栏问题。
其他
BeatBox 项目 Demo 地址:
https://github.com/visiongem/AndroidGuideApp/tree/master/BeatBox