android狀態欄顏色設置顏色
① Android的supportV7中默認按鈕的顏色設置
我們知道,在styles.xml文件裡面可以設置主題,在主題中設置的一些顏色,將會應用到默認的AppCompat控制項上,從而很簡單的就可以保持整個APP在UI上的一致性。下面是一個例子:
至於各種控制項是如何應用這些顏色設置的,則需要經過更多的嘗試了。
比如Activity導航欄默認的圖標顏色是colorControlNormal,導航欄的底色是colorPrimary,沉浸式狀態欄默認的顏色是colorPrimaryDark;
比如FAB的默認顏色是colorAccent;
比如AppCompatCheckBox默認的選中狀態的顏色是colorAccent,而默認的未選擇狀態的顏色的colorControlNormal;
比如AppCompatSpinner的下拉圖標的默認顏色也是colorControlNormal。
......
其實涉及到的主要的就是下面這幾個參數:
那麼問題來了,如果你使用藍色的沉浸式狀態欄,導航欄上的圖標則使用白色,那在這個Activity中使用AppCompatCheckBox的時候,未選擇狀態就也是白色的,此時如果在白色的背景色下,用戶就看不出這是個AppCompatCheckBox了。這時候怎麼辦?如下圖(圖中使用的是AppCompatSpinner):
其實很簡單,在這個AppCompatCheckBox上使用app:theme="@style/MyCheckBox",然後在styles.xml中添加新的
但是需要注意的是,這樣可能引起控制項其他默認屬性的變化,比如CheckBox的textSize會變成1(不使用app:theme的時候和APP的默認字體大小一樣)。
android:theme和app:popupTheme的作用,以及在android 3.0以下不起作用問題的解決
② android導航欄與狀態欄顏色及透明度
首先創建一個空項目,如下圖
可以看到狀態欄是白字黑背景, 導航欄也是白圖標黑背景
嘿嘿, 我們先把狀態欄隱藏掉,在添加一個ImageView, 讓ImageView做背景(方便查看)
樣子如下:
將狀態欄和導航欄設置透明, 找到 Manifest.xml 文件, 在主題樣式中修改
android:statusBarColor 設置狀態欄背景色
android:navigationBarColor 同上
android:windowLightStatusBar 設置狀態欄文字色, true為深色, false為白色
android:windowLightNavigationBar 同上
android:windowTranslucentStatus 設置狀態欄半透明狀態, true為半透明, false為不透明
android:windowTranslucentNavigation 同上
最後兩個半透明狀態下面沒用, 可自己嘗試看效果
效果圖如下:
可以看到導航欄與狀態欄並沒有透明,原因是默認不能佔用狀態欄空間與導航欄空間,根布局背景為白色,所有這里顯示白色
可以通過設置 getWindow().getDecorView().setSystemUiVisibility() 來適配
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 適配狀態欄空間
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 適配導航欄空間
效果如下:
③ 關於 Android 中的各種 Bar 和「透明狀態欄」的一些知識
本文主要講解關於Android中沉浸式狀態欄、全屏模式與狀態欄、ActionBar、ToolBar之間的區別與使用方法,旨在幫助讀者理解如何適配Android狀態欄。
請注意,狀態欄與這些所謂的「Bar」在概念上完全不同。狀態欄,即status bar,是Android設備頂部顯示時間、通知等信息的區域。在Android設計中,早期注重功能性,TitleBar(標題欄)僅僅用於顯示頁面標題。隨著Android 3.0的發布,引入了注重美感的Holo樣式,此時TitleBar被ActionBar取代,功能擴展至更多方面。
在Android 3.0之前,TitleBar僅用於顯示頁面標題。而在Android 3.0之後的API 11版本,為了提升美觀性,引入了具有更多功能的ActionBar。簡而言之,ActionBar在本質上與TitleBar類似,它們均不是傳統的控制項形式,而是嵌套在DecorView中,可通過window.setFeatureInt方法進行功能和樣式的修改。
隨著Android 5.0的推出,ToolBar被引入,成為一個獨立控制項,為開發者提供了更多的靈活性。在Android 4.1及以上的版本中,ActionBar是標准配置,但其使用僅限於4.1以上。在Android 4.4之前,狀態欄始終為黑色,而從4.4開始,引入了windowTranslucentStatus特性,使狀態欄顏色可調,這種現象被國內開發者稱為「沉浸式狀態欄」,實際上這一說法並不準確。
所謂的「沉浸式狀態欄」實際上是狀態欄透明模式,即內容UI全屏,狀態欄透明。在Android 4.4中,通過windowTranslucentStatus可以將狀態欄顏色調整為其他顏色,以適應不同的應用需求。然而,在谷歌官方文檔中,並未提及「沉浸式狀態欄」這一概念,僅提及了全屏模式和狀態欄顏色調整。
在實現透明狀態欄模式時,可以採用以下步驟:首先設置內容布局全屏,使內容覆蓋頂部狀態欄;接著將狀態欄設為透明;最後,應用屬性以確保布局全屏顯示。需要注意的是,狀態欄顏色的修改在Android 5.0後支持,而在Android 4.4之前則不允許。
為了適應全屏模式,開發者應考慮使用頁面布局,並通過DecorView來獲取根布局,進而控制狀態欄顯示與布局的全屏擴展。在Android 6.0中,還支持修改狀態欄文字顏色。
通過本文內容,您將對Android中狀態欄、ActionBar、ToolBar的使用以及如何適配狀態欄有更深入的理解。如需進一步學習,可參考相關文章或訪問個人公眾號獲取更多資源。