一篇文章看懂安卓狀態列各種樣式
安卓狀態列大家都不陌生了,但是冷不丁一尋思還真是挺亂的,各種效果各種實現方式,不同版本實現方式不同巴拉巴拉...
這裡做個總結,致力於實用性,也許是很良心的安卓狀態列總結了...
我不想說什麼沉浸式還是什麼有爭議的東西,以下效果均配備了高畫質無碼大圖為證
透過本文,我想你可以明白
全屏(隱藏狀態列)
狀態列透明
狀態列變色
這麼幾種效果的實現方式
那寶寶要開始啦~
以下實現均建立在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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 沉浸式狀態列
- 一篇文章基本看懂gradleGradle
- Flutter 安卓狀態列那點事兒Flutter安卓
- Android沉浸式狀態列還能這樣玩—教你玩出新花樣Android
- 理解樹狀陣列這一篇文章就夠啦陣列
- C和C++篇——各種各樣的函式C++函式
- 如何在linux上下載各種常用安卓應用Linux安卓
- MUI——設定沉浸式狀態列UI
- 關於 Android 中的各種 Bar 和“透明狀態列”的一些知識Android
- 安卓架構文章合集安卓架構
- 各種各樣的映象加速
- 狀態列
- Android 沉浸式狀態列的實現Android
- 這是一篇你能看懂 Java JVM 文章JavaJVM
- 現在常說的 宣告式,狀態 到底是個啥?一篇文章淺聊清楚
- 上手 Vue 新的狀態管理 Pinia,一篇文章就夠了Vue
- 各種HTTP 3xx重定向狀態碼介紹HTTP
- Android更換APP字型—TextView各種字型樣式AndroidAPPTextView
- 被各種巢狀判斷噁心的你,想到狀態模式了嗎?巢狀模式
- Android-沉浸式狀態列的實現Android
- 一張圖看懂 SQL 的各種 join 用法SQL
- 安卓四種引用安卓
- CSS 繪製各種形狀CSS
- Flutter跨應用更改狀態在安卓端的實現Flutter安卓
- React 4 種狀態型別及 N 種狀態管理React型別
- android短視訊開發,自定義更改平臺主題以及狀態列樣式Android
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- 狀態列相關
- Android 狀態列透明Android
- 安卓動態獲取許可權看這一篇就夠了安卓
- 重學安卓:絕不丟失狀態的 Activity 重建機制!安卓
- 一篇文章看懂Java併發和執行緒安全(二)Java執行緒
- 一篇文章看懂Java併發和執行緒安全(一)Java執行緒
- 安卓動態除錯七種武器之孔雀翎 – Ida Pro安卓除錯
- 玩轉陣列各種方法陣列
- Flutter 知識梳理 (狀態管理) - Provider 之各種 XXProvider 的使用姿勢FlutterIDE
- 中科三方域名管理專題:各種域名狀態介紹
- 免費api推薦,各種各樣的都有~API