一篇文章看懂安卓狀態列各種樣式
安卓狀態列大家都不陌生了,但是冷不丁一尋思還真是挺亂的,各種效果各種實現方式,不同版本實現方式不同巴拉巴拉...
這裡做個總結,致力於實用性,也許是很良心的安卓狀態列總結了...
我不想說什麼沉浸式還是什麼有爭議的東西,以下效果均配備了高畫質無碼大圖為證
透過本文,我想你可以明白
全屏(隱藏狀態列)
狀態列透明
狀態列變色
這麼幾種效果的實現方式
那寶寶要開始啦~
以下實現均建立在4.4版本之上,4.4以下如果老闆非讓你相容,你就給他一大嘴巴子
全屏
全屏的實現方式很多,這裡給出一個
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
你把它放在setContentView之前之後都行,4.4 ~ 7.0 測試通用
正常狀態
在狀態列透明和著色之前,給大家看一下 4.4 版本和 5.0+ 版本的狀態列在什麼程式碼都不加的正常情況下分別是什麼樣子的
注意 標題欄統一用的 ToolBar,如果你老闆非讓你用 ActionBar,你就給他一大嘴巴子
4.4 版本如下,狀態列顏色預設是 寡婦黑
4.4 版本正常情況
5.0+ 版本如下,狀態列顏色預設是 colorprimarydark 的 二逼藍
5.0+ 版本正常情況
好了,正常的見到了,該見點不正常的了,人齊開車
狀態列透明
5.0+ 版本
提到透明,第一印象就是這個
你在 style 中把它加上去,效果這樣的:
啊啊啊,頭上的狀態列掉下來了
按我的理解就是透明,而且不佔空間,那麼到這裡就可以了,所以你需要android:fitsSystemWindows="true"
來幫忙,這句話的意思是,設定該屬性的 view 會調整 padding 來給 狀態列留出空間,說的,我也不知道真假
那麼注意啦,如果你把android:fitsSystemWindows="true"
加到根佈局上去,就會變成這樣:
我變灰了?!
嘿嘿,雖然狀態列看上去灰灰的,其實他是透明的~
你應該把android:fitsSystemWindows="true"
放在 ToolBar 的佈局上,看:
完美的MD風格啊
4.4 版本
書接上文,如果你只設定
效果是這樣的:
我有陰影耶
這個漸變的陰影...我反倒覺得挺吃藕的
跟之前的原理一樣,我們在根佈局加上android:fitsSystemWindows="true"
噯這個人,明知道錯還...
看看效果,變成了如此巨醜的顏色!!!
我們把android:fitsSystemWindows="true"
加到 ToolBar 上去:
哼,終於到我上場了
這回狀態列不是像 5.0+ 中比 ToolBar 顏色稍微深一點的 MD 風格了,而是完全的和 ToolBar 一個顏色外加漸變。谷歌這幫鬼佬是有多喜歡漸變...
當透明狀態列碰到 DrawerLayout
這個官方的抽屜控制元件碰到了透明導航欄,一樣的設定:
style 設定
- true
ToolBar 新增
android:fitsSystemWindows="true"
4.4 版本效果如下
4.4的導航抽屜
5.0+ 版本效果如下
5.0+的導航抽屜
狀態列著色
這裡的著色就是指狀態列用純色填充
5.0+ 版本
5.0 以上,利用現成的方法 getWindow().setStatusBarColor(Color.GREEN);
來設定就可以啦,上圖
變變變
4.4 版本
4.4 版本並沒有直接操控狀態列方法,因此,這裡直接照搬 的方法
package com.zhy.colorfulstatusbar;import android.annotation.TargetApi;import android.app.Activity;import android.content.Context;import android.graphics.Color;import android.os.Build;import android.view.View;import android.view.ViewGroup;/** * Created by zhy on 15/9/21. */public class StatusBarCompat{ private static final int INVALID_VAL = -1; private static final int COLOR_DEFAULT = Color.parseColor("#20000000"); @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static void compat(Activity activity, int statusColor) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (statusColor != INVALID_VAL) { activity.getWindow().setStatusBarColor(statusColor); } return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT 0) { result = context.getResources().getDimensionPixelSize(resourceId); } return result; } }
這個檔案說白了就是用一個高度和狀態列高度一樣的 view 去覆蓋住狀態列,該 view 的背景色就是我們設定的顏色
activity 中呼叫如下:StatusBarCompat.compat(this, getResources().getColor(R.color.status_bar_color));
注意啦,使用該方法的前提是
style 設定
- true
ToolBar 新增
android:fitsSystemWindows="true"
別忘了呀
總結
除了上述這幾種,肯定還有別的效果(鬼知道客戶腦洞有多大),希望大家有別的效果可以分享下,擁抱開源,改變世界!本文也會再有新的方案或技巧時持續更新~麼麼
2017/05/07 更新
如果你在安卓 5.0 以上也想實現 4.4 那種效果 ( 類似網易雲音樂 ) ,新增如下程式碼
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); getWindow().setStatusBarColor(Color.TRANSPARENT);``` Demo 效果如下(狀態列完全透明): ![網易雲音樂 5.0+ DrawerLayout 效果](http://upload-images.jianshu.io/upload_images/4957926-a504d10c057fe2bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
作者:一杯劉
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2802913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 執行緒各種狀態執行緒
- android狀態列一體化(沉浸式狀態列)Android
- 一篇文章基本看懂gradleGradle
- UIButton基本狀態及各種疊加狀態詳解UI
- 沉浸式狀態列解析
- iOS模擬各種網路狀態iOS
- [快速搞定]android 狀態列一體化 沉浸式狀態列Android
- 設定沉浸式狀態列
- 如何控制手機網站控制狀態列顯示樣式網站
- Android沉浸式狀態列還能這樣玩—教你玩出新花樣Android
- 理解樹狀陣列這一篇文章就夠啦陣列
- C和C++篇——各種各樣的函式C++函式
- Oracle LISTENER 中各種狀態資訊的含義Oracle
- Oracle 資料庫的各種狀態和模式Oracle資料庫模式
- Android 沉浸式狀態列攻略 讓你的狀態列變色吧Android
- MUI——設定沉浸式狀態列UI
- 一篇文章貫穿ACE各種傳送接收元件 1.2版元件
- 這是一篇你能看懂 Java JVM 文章JavaJVM
- 一篇文章弄懂THREE.js中的各種矩陣關係JS矩陣
- 上手 Vue 新的狀態管理 Pinia,一篇文章就夠了Vue
- 一張圖看懂 SQL 的各種 join 用法SQL
- Android沉浸式狀態列實現Android
- Android 沉浸式狀態列實現Android
- 關於 Android 中的各種 Bar 和“透明狀態列”的一些知識Android
- 各種HTTP 3xx重定向狀態碼介紹HTTP
- iOS APP各種狀態(進入後臺,前臺等)iOSAPP
- 被各種巢狀判斷噁心的你,想到狀態模式了嗎?巢狀模式
- Android 沉浸式狀態列的實現Android
- 5 個處理狀態列的函式函式
- 一篇文章看懂Java併發和執行緒安全Java執行緒
- Android更換APP字型—TextView各種字型樣式AndroidAPPTextView
- React 4 種狀態型別及 N 種狀態管理React型別
- CSS 繪製各種形狀CSS
- 各種檢視的巢狀巢狀
- Activity樣式 、狀態列透明的一些總結——你絕對想不到的
- Android-沉浸式狀態列的實現Android
- Android關於沉浸式狀態列總結Android
- 一篇文章看懂Java併發和執行緒安全(二)Java執行緒