編輯:關於android開發
首先我要區分清楚沉浸式狀態欄與變色狀態欄。
沉浸式狀態欄指的是,狀態欄隱藏,在手指做了相關操作後,狀態欄顯示出來,例如視頻播放器,在播放視頻時是隱藏狀態欄的,但是點擊屏幕的時候,狀態欄會顯示出來,再例如文本閱讀器,在閱讀的時候是全屏的,然後從屏幕上方下滑或者下方上劃,虛擬鍵和狀態欄出現了,但卻是直接覆蓋在程序文字上的,這是所謂的沉浸式狀態欄。
那麼大家平時所說的狀態欄與導航欄顏色相同,或者透明,指的是變色狀態欄,或者透明狀態欄。
對於這兩個概念的理解,大家可以參考http://www.androidchina.net/3520.html。
v19(4.4)以後開始支持android:windowTranslucentStatus屬性,透明狀態欄,而v21(5.0)以後出現變色狀態欄,可以自由設置狀態欄顏色。
通過這兩個新特性,可以幫助我們快速的實現4.4以後的狀態欄與app的導航欄顏色相同。
實現變色導航欄主要是通過styles裡面的theme來實現的:
首先,在 “values\styles.xml” 中定義一個最基礎的theme,AppTheme.Base,該主題繼承於AppCompat.Light主題,因為本例子中使用了toolbar(谷歌已經建議用toolbar取代actionbar),因此該主題的主要目的是用於隱藏自帶的actionBar,以及設置不顯示title。
接下來定義主題BaseAppTheme,繼承於上面定義的AppTheme.Base主題,該主題定義了三個顏色,分別指定狀態欄、toolbar和頁面中重點控件的顏色(顏色自己去定義)。
對於AppCompat主題中,各個顏色屬性的含義,可以參考下圖
然後定義一個AppTheme,繼承於BaseAppTheme,
在AndroidManifest.xml裡application標簽下設置主題 android:theme="@style/AppTheme"
到此,對於4.4以下的系統,會使用values\styles.xml中的AppTheme主題,那麼在4.4跟5.0這兩個系統下,我們要做以下的處理。
4.4:新建“values-v19\styles.xml”
在裡面定義適用與4.4系統的AppTheme,在4.4系統中提出的是透明狀態欄,因此這裡我們定義一個AppTheme繼承於BaseAppTheme,其中只要實現透明狀態欄,代碼如下:
5.0:新建“values-v21\styles.xml”
在裡面定義適用與5.0系統的AppTheme,在5.0系統中提出的變色狀態欄,因此這裡我們只需定義一個AppTheme繼承於BaseAppTheme代碼如下:
注意在布局文件中要設置如下屬性,根據其字面意思,理解為,是否適應系統窗口,當設為true的時候,適應系統窗口,布局時會考慮狀態欄的存在;如果設為false,則不考慮狀態欄的存在,全屏顯示,狀態欄出現在布局上層,可參考下面效果圖。
android:fitsSystemWindows=”true”
設為true:
設為false:
完成以上設置以後,就可以達到在4.4系統以上自定義狀態欄、導航欄等顏色的目的。
狀態欄透明
上面研究的是狀態欄與導航欄顏色的設置,那麼如何實現上圖所示的,狀態欄、導航欄透明,背景圖片全屏顯示的呢?
按道理想,既然可以設導航欄的顏色,那麼我直接把顏色設成透明色,是不是就可以了呢?
答案是,正解~
不過,還是要處理一些特殊情況。
首先,我們把styles中的顏色設為透明,然後在主頁面根布局下,設置一個背景圖和設置 android:fitsSystemWindows=”true” 屬性
運行的結果是,在4.4系統上,完全正常顯示,而在5.0上,toolbar正常顯示了透明色,但是狀態欄顯示的是灰色透明色
4.4系統:
5.0系統:
原因應該是,4.4系統支持的就是透明狀態欄,所以只需要將狀態欄顏色設為透明,即可到達效果。
而5.0支持的是變色狀態欄,得到的效果與我們預期不同,特做如下處理:
在代碼中設置,判斷當sdk大於等於5.0時,執行以下代碼
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
運行後,在4.4以及5.0系統上都能實現透明效果了,效果圖如下:
源碼下載
計算機網絡和Internet之核心網絡,計算機網絡internet1.網狀的路由器 路由器的鏈接組成了網絡的核心。 任何一個路由器,或者某條線路掛掉,但是網絡還是通的,這
27個漂亮的移動端注冊/登錄界面設計作品,27登錄界面設計作品英文:medium 作者:Muzli 譯者:設計達人 鏈接:http://www.s
UI組件之ImageView及其子類(二)ImageButton ,ZoomButton 從ImageButton這個字面意思上來看,它是一個圖片按鈕,那麼我們就可以使用
安卓7.0首批截圖公布:驚現漢堡菜單,安卓漢堡今天谷歌在開發者頁面公布了首批Android N(安卓7.0)截圖,從截圖中能夠了解到的一點是安卓7.0設置界面中會添加漢堡
minSdkVersion maxSdkVersion targetSd