沉浸式,透明式,可變狀態(tài)欄解讀

最近項(xiàng)目需求中需要對statusBar做透明穿透處理,剛開始沒想太多潦俺,隨著開發(fā)進(jìn)行,發(fā)現(xiàn)坑位那絕對是滿滿的徐勃,主要就是要對不同的API進(jìn)行適配事示,很難做到多平臺的兼顧。

android的狀態(tài)欄有三種不同狀態(tài)僻肖,分別是:
  • 沉浸式狀態(tài)欄
  • 透明狀態(tài)欄(又可分為“半透明”和“全透明”)(API>=19)
  • 變色狀態(tài)欄(API>=21)

沉浸式狀態(tài)欄指的是肖爵,狀態(tài)欄隱藏,在手指做了相關(guān)操作后檐涝,狀態(tài)欄顯示出來遏匆,例如視頻播放器,在播放視頻時(shí)是隱藏狀態(tài)欄的谁榜,但是點(diǎn)擊屏幕的時(shí)候幅聘,狀態(tài)欄會(huì)顯示出來,再例如文本閱讀器窃植,在閱讀的時(shí)候是全屏的帝蒿,然后從屏幕上方下滑或者下方上劃,虛擬鍵和狀態(tài)欄出現(xiàn)了巷怜,但卻是直接覆蓋在程序文字上的葛超,這是所謂的沉浸式狀態(tài)欄,而我們經(jīng)常把沉浸和透明混為一談,其實(shí)是有本質(zhì)區(qū)別的。

半透明狀態(tài)欄

Android4.4(API 19)以后才開始支持Android:windowTranslucentStatus屬性延塑,需要注意的是,TranslucentStatus屬性雖然是從4.4開始支持的绣张,但在 4.4 和 5.x 上的表現(xiàn)不同,不過都可以概括為一種半透明关带,4.4 是一層漸變的遮罩層,樣子是這樣的:

bantouming.png

而5.x 以上是一條半透明的遮罩層,樣子是這樣的:

zhezhao.png

可以看到Android:windowTranslucentStatus屬性無論在4.4上還是5.0上都做不到全透明侥涵,不過后來發(fā)現(xiàn)有的個(gè)別手機(jī)ROM廠商,不太按套路出牌,比如這個(gè)華為ROM芜飘,在其5.0上通過這個(gè)屬性就可以做到全透明务豺,但是我還是發(fā)現(xiàn)了它支持的并不穩(wěn)定,偶爾還是出現(xiàn)個(gè)半透明條嗦明,所以笼沥,還是按API要求來干事,兩個(gè)字——保險(xiǎn)

全透明狀態(tài)欄

通過上面的分析娶牌,可知通過屬性Android:windowTranslucentStatus并不能做的真正做到狀態(tài)欄的全透明奔浅,想實(shí)現(xiàn)全透明就需要靠另外一個(gè)屬性了——Android:statusBarColor,是的裙戏,這個(gè)同時(shí)也是下面要講的變色狀態(tài)欄要用到的乘凸,所以,往下看~~~

變色狀態(tài)欄

這個(gè)是v21(5.0)以后才開始支持,主要通過Android:statusBarColor進(jìn)行設(shè)置,通過它可以自由設(shè)置狀態(tài)欄顏色累榜,當(dāng)然包括透明色营勤,所以在5.0之后才能實(shí)現(xiàn)statusBar全透明

到此,以上是對statusBar三種樣式的狀態(tài)介紹壹罚,從介紹中不難得出至少兩個(gè)結(jié)論:

  • 第一葛作,對于在5.0以下的系統(tǒng)里如果想實(shí)現(xiàn)statusbar全透明是做不到的。

  • 第二猖凛,就是在5.0以上系統(tǒng)里實(shí)現(xiàn)statusbar全透明有兩種方式赂蠢,一種我稱為 “偽透明” 即假的透明,另一種就是 “真透明” 了辨泳。

偽透明狀態(tài)欄

偽透明指狀態(tài)欄是有背景顏色的虱岂,而并非透明狀態(tài),只不過是通過Android:statusBarColor屬性把statusbarde的顏色設(shè)置的和狀態(tài)欄下面的View的顏色一樣了菠红,這和真透明狀態(tài)欄的主要區(qū)別就是此時(shí)界面中的view顯示是在statusbar下面的第岖,并沒有延伸到statusbar的頂部。

真透明狀態(tài)欄

真透明狀態(tài)欄區(qū)別于上面的偽狀態(tài)欄就不用說了试溯,它通過把Android:statusBarColor屬性設(shè)置為透明蔑滓,而且一個(gè)不能忘記的是需要同時(shí)設(shè)置layout布局延伸到屏幕頂部,否則statusbar透出的背景就是window的根布局的背景顏色了遇绞,也即是DecorView的顏色键袱。設(shè)置布局延伸到頂部的相關(guān)代碼:

  Window window = getWindow();
  int originStatus = window.getDecorView().getSystemUiVisibility();
  int deStatus = originStatus | 
  View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
  window.getDecorView().setSystemUiVisibility(deStatus);

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN這個(gè)flag就是控制讓你的布局延伸到屏幕頂部,此時(shí)statusbar會(huì)覆蓋在布局上面摹闽,它和View.SYSTEM_UI_FLAG_FULLSCREEN很相似蹄咖,可自行查看相關(guān)含義。

看到這付鹿,感覺也就這么多東西澜汤,沒什么難得啊铝量,直接寫不得了,是不是忽略了statusbar上面顯示的內(nèi)容了呢银亲,android中默認(rèn)的statusbar樣式基本是黑色或者灰色背景,然后里面的內(nèi)容是白色纽匙,有的說了既然statusbar的背景顏色可以設(shè)置了务蝠,內(nèi)容不也有個(gè)屬性android:windowLightStatusBar可以控制顏色呢,確實(shí)烛缔,可以通過這個(gè)屬性來改變statusbar上內(nèi)容的顏色馏段,但是這個(gè)api是android6.0以后才有的,這就尷尬了践瓷,statusbar的顏色在5.0以上的系統(tǒng)都可以改變院喜,但是它上面內(nèi)容的顏色只有在6.0以上的系統(tǒng)才能控制,那么在5.0和6.0之間的系統(tǒng)晕翠,就會(huì)很容易發(fā)生下面這種場景:

  • statusbar的顏色需要設(shè)置成白色或者說statusbar穿透的背景是白色了喷舀,而statusbar上的內(nèi)容默認(rèn)也是白色

此時(shí)對于在5.0和6.0之間的系統(tǒng)遇到以上這種情況不就悲催了,而且你是無法去完美適配的淋肾,除非你的app不講究一致性和協(xié)調(diào)美硫麻,因?yàn)間oogle沒給你方法,唉樊卓。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拿愧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碌尔,更是在濱河造成了極大的恐慌浇辜,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唾戚,死亡現(xiàn)場離奇詭異柳洋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颈走,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門膳灶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人立由,你說我怎么就攤上這事轧钓。” “怎么了锐膜?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵毕箍,是天一觀的道長。 經(jīng)常有香客問我道盏,道長而柑,這世上最難降的妖魔是什么文捶? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮媒咳,結(jié)果婚禮上粹排,老公的妹妹穿的比我還像新娘。我一直安慰自己涩澡,他們只是感情好顽耳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妙同,像睡著了一般射富。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粥帚,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天胰耗,我揣著相機(jī)與錄音,去河邊找鬼芒涡。 笑死柴灯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的费尽。 我是一名探鬼主播弛槐,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼依啰!你這毒婦竟也來了乎串?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤速警,失蹤者是張志新(化名)和其女友劉穎叹誉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闷旧,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡长豁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忙灼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匠襟。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖该园,靈堂內(nèi)的尸體忽然破棺而出酸舍,到底是詐尸還是另有隱情,我是刑警寧澤里初,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布啃勉,位于F島的核電站,受9級特大地震影響双妨,放射性物質(zhì)發(fā)生泄漏淮阐。R本人自食惡果不足惜叮阅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泣特。 院中可真熱鬧浩姥,春花似錦、人聲如沸状您。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竞阐。三九已至,卻和暖如春暑劝,著一層夾襖步出監(jiān)牢的瞬間骆莹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工担猛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幕垦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓傅联,卻偏偏與公主長得像先改,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蒸走,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容