《Android編程權(quán)威指南》之樣式與主題篇(一)

《Android編程權(quán)威指南》第 21 章第一篇,主要就是給 BeatBox 界面重定制,內(nèi)容不多,將學(xué)習(xí)到 Android 主題和樣式相關(guān)的知識。

一、顏色資源

顏色資源通常統(tǒng)一放在 res/values/colors.xml 文件中進(jìn)行管理,整個(gè)應(yīng)用對它進(jìn)行引用。

定義幾種顏色

顏色可以從左邊的小正方形實(shí)時(shí)看到,還挺方便。通常項(xiàng)目中會(huì)定義各種色值,還有黑夜模式的色值,會(huì)放另外一個(gè) -night 的文件夾中的 color.xml,用同一個(gè)名字,這樣主題切換到暗黑模式就自動(dòng)變化引用的色值了。跟前面做國際化方式類似做此功能。

二、樣式

樣式是能夠應(yīng)用于視圖部件的一套屬性。存放在 res/values/styles.xml 中。先添加個(gè)新樣式 BeatBoxButton。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="BeatBoxButton">
        <item name="android:background">@color/dark_blue</item>
    </style>
</resources>

樣式可以為很多控件共用,更改屬性時(shí),只修改公共樣式定義即可。

然后去給 Button 添加樣式。

style="@style/BeatBoxButton"

跑起來實(shí)際上依然是丑丑的,問題不大,就是為了學(xué)習(xí)嘛。

樣式繼承

樣式也支持繼承。一個(gè)樣式能繼承并覆蓋其他樣式的屬性。

比如用命名的方式繼承:

    <style name="BeatBoxButton.Strong">
        <item name="android:textStyle">bold</item>
    </style>

或者是指定父樣式的方式繼承:

    <style name="StrongBeatBoxButton" parent="@style/BeatBoxButton">
        <item name="android:textStyle">bold</item>
    </style>

然后繼續(xù)給 Button 設(shè)置一下體驗(yàn)一下。

三、主題

主題可看作樣式的進(jìn)化加強(qiáng)版,主題屬性會(huì)應(yīng)用于整個(gè)應(yīng)用。

打開 manifest 文件可以看到應(yīng)用默認(rèn)設(shè)置的主題:

manifest

theme 指向地方:

theme

主題實(shí)際也是一種樣式,可見此處我的默認(rèn)的主題繼承了 Theme.MaterialComponents.DayNight.DarkActionBar,想要深入了解屬性就繼續(xù)按住 Command(Ctrl)跳轉(zhuǎn)進(jìn)入即可。

AppCompat 庫自帶三大主題:

  • Theme.AppCompat——深色主題。
  • Theme.AppCompat.Light——淺色主題。
  • Theme.AppCompat.Light.DarkActionBar——帶深色工具欄的淺色主題。

大概目前我的項(xiàng)目比書中要新一點(diǎn),所以默認(rèn)是 MaterialComponents 庫主題,深色模式或者是亮色模式命名規(guī)則基本一致。

有關(guān) MaterialComponent 的深色主題背景 詳情請參考:

https://material.io/develop/android/theming/dark

四、添加主題顏色

可自行改成自己想要的顏色啦。

colorPrimary 屬性主要用于應(yīng)用欄。
colorPrimaryDark 用于屏幕頂部的狀態(tài)欄。

注意,只有 Lollipop 以后的系統(tǒng)支持狀態(tài)欄主題色。對于之前的系統(tǒng),無論指定什么主題色,狀態(tài)欄都是不變的黑底色。

項(xiàng)目中常常有需求需要沉浸式的狀態(tài)欄,有個(gè)沉浸式狀態(tài)欄實(shí)現(xiàn)開源項(xiàng)目推薦:

https://github.com/gyf-dev/ImmersionBar

貌似挺不錯(cuò)的。目前我在項(xiàng)目中也是用此方案來解決沉浸式狀態(tài)欄問題。

其他

BeatBox 項(xiàng)目 Demo 地址:

https://github.com/visiongem/AndroidGuideApp/tree/master/BeatBox

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容