《Android编程权威指南》之样式与主题篇(一)

2021-11-23  本文已影响0人  夜远曦白

《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 文件可以看到应用默认设置的主题:

manifest

theme 指向地方:

theme

主题实际也是一种样式,可见此处我的默认的主题继承了 Theme.MaterialComponents.DayNight.DarkActionBar,想要深入了解属性就继续按住 Command(Ctrl)跳转进入即可。

AppCompat 库自带三大主题:

大概目前我的项目比书中要新一点,所以默认是 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

上一篇下一篇

猜你喜欢

热点阅读