Android 5.0 如何實現將布局的內容延伸到狀態欄?

Android自5.0以後,應用可以實現類似iOS的狀態欄變色功能,類似Android版的知乎。這種實現方式很簡單,只需要在style裡面指定顏色即可。

但是類似Google play的將布局的內容延伸到狀態欄實一直沒有找到辦法,如圖 這個頂部狀態欄。一半是這張圖片。一半是綠色。嘗試吧狀態欄設為透明。結果。。它真透明了。沒顏色了

大神們說說這個是如何實現的呢?需要特別的辦法嗎。

之前放了兩張圖可能讓大家有了誤會


不請自來,我覺得有些回答說的不是很完整,局限比較多。這個問題昨天正好研究了下,我的拙見是:

如果不需要支持 4.4,建議使用 statusBarColor

如果需要支持 4.4,簡易 4.4 使用 windowTranslucentStatus;5.x 使用 statusBarColor/colorPrimaryDark

(本答案在 5.1 和 5.0 中的解決方式並不會影響軟鍵盤和 EditText 的行為,4.4 暫時無法測試,如有朋友發現 bug 請指出,我會在回答中註明,以免其他人一起掉坑裡)

下面說原因:

TranslucentStatus 在 4.4 和 5.x 上表現不同,4.4 是一層漸變的遮罩層;5.x 以上是一條半透明的遮罩層。

看上去很兼容,其實不是,在我的回答 為什麼 Xperia 5.0 對部分第三方 app 狀態欄顯示的是 4.4 的樣式? - Allan 的回答 中,第一張圖就暴露了這個問題 —— 遮罩層顏色過於深,不符合 Material Design 的推薦標準。

Toolbars and status bars

Toolbars and larger color blocks should use the 500 color of the primary color of your app. The status bar should be the darker 700 tint of your primary color.

所以簡易重寫 v21 的 style,只將 windowTranslucnetStatus 應用於 v19。

而 v21 使用 statusBarColor 自定義符合設計指南的顏色。

如何做到 v21 上半透明的 statusBar,即在 statusbar 後顯示:

1.

getWindow().setStatusBarColor()

設置半透明 statusbar

2.

getWindow()
.getDecorView()
.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

因為 FLAT_LAYOUT_STABLE 和 FLAG_LAYOUT_FULLSCREEN 是伴隨 translucentStatus 自動設置的,v21 上你需要手動設置(因為上述方法沒用 translucentStatus)。

3. 手動調整各個 View 的位置:可以動態或缺 StatusBar 的 Height。

也可以像我一樣比較懶惰

&&25dp&

未來的 Android M (感謝 @張啟 指正)

values-v23/dimens.xml

&24dp&

為啥那麼麻煩問 Google 去。

4. Enjoy

v19:

v21:

這個問題比我們想像的都複雜,建議同時閱讀 @1ittlecup@張啟 的兩個答案:

Android 5.0 如何實現將布局的內容延伸到狀態欄實? - 1ittlecup 的回答

Android 5.0 如何實現將布局的內容延伸到狀態欄實? - 張啟的回答

綜合使用需求選擇合適的解決方法。


個人感覺排名第一的答案將簡單問題複雜化了,其實Google在最新(截止2015年6月)的suport包已經提供了很好的支持。

UPDATED....

有圖有真相,以下截圖和題主描述完全一致:

練手寫的app,不要在意某些細節....

簡單2步就OK:

第1步:

v21的style

&