Bilibili for Android 的 Redesign 文章正在路上共屈,沒有那么快完成绑谣,那么我想先寫一篇文章來談?wù)勎覐娬{(diào)了很多遍的“沉浸模式”問題。
我都不敢相信拗引,現(xiàn)在 2015 年快過一半了借宵,還有不少所謂 Android 愛好者分不清“沉浸模式”和“透明欄”之間的區(qū)別。
那好矾削,我們來好好捋一捋“沉浸模式”究竟是個什么玩意壤玫。
什么是沉浸模式?
從 Android 4.4 開始怔软,Android 為 "setSystemUiVisibility()" 提供了一個新的標記 "SYSTEM_UI_FLAG_IMMERSIVE"垦细,就是我們所談的 "Immersive Mode",也就是沉浸模式挡逼,全稱為 "Immersive Full-Screen Mode" 括改。
Google 提供這個新模式的初衷,是為了讓應(yīng)用能夠?qū)崿F(xiàn)真正完整的全屏模式體驗家坎。
之前 Android 靠兩個標記實現(xiàn)全屏模式嘱能,一個是 "SYSTEM_UI_FLAG_FULLSCREEN",另一個是 "SYSTEM_UI_FLAG_HIDE_NAVIGATION"(僅適用于使用導(dǎo)航欄的設(shè)備虱疏,即虛擬按鍵) 惹骂。
這兩個標記都存在一些問題,例如使用第一個標記的時候做瞪,除非 App 提供暫時退出全屏模式的功能(例如部分電子書軟件中點擊一次屏幕中央位置)对粪,用戶是一直都沒法看見狀態(tài)欄的右冻。這樣,如果用戶想去看看通知中心有什么通知著拭,那就必須點擊一次屏幕纱扭,顯示狀態(tài)欄,然后才能調(diào)出通知中心儡遮。
而第二個標記的問題在于乳蛾,Google 認為導(dǎo)航欄對于用戶來說是十分重要的,所以只會短暫隱藏導(dǎo)航欄鄙币。一旦用戶做其他操作肃叶,例如點擊一次屏幕,導(dǎo)航欄就會馬上被重新調(diào)出十嘿。這樣的設(shè)定對于看圖軟件因惭,視頻軟件等等沒什么大問題,但是對于游戲之類用戶需要經(jīng)常點擊屏幕的 App详幽,那就幾乎是悲劇了——這也是為什么你在 Android 4.4 之前找不到什么全屏模式會自動隱藏導(dǎo)航欄的應(yīng)用筛欢。
那么 Google 面對這樣的問題自然也不會坐視不管浸锨。還記得 iOS 是怎么處理用戶在全屏應(yīng)用下調(diào)出通知中心/控制中心操作的么唇聘?對,用戶做一個向內(nèi)滑動的手勢柱搜,一個小箭頭就會出現(xiàn)迟郎,在不影響當(dāng)前應(yīng)用全屏的情況下引導(dǎo)用戶操作。
Google 借鑒了 iOS 的邏輯健爬,4.4 之后加入的這個 Immersive Full-Screen Mode 允許用戶在應(yīng)用全屏的情況下控乾,通過在原有的狀態(tài)欄/導(dǎo)航欄區(qū)域內(nèi)做向內(nèi)滑動的手勢來實現(xiàn)短暫調(diào)出狀態(tài)欄和導(dǎo)航欄的操作,且不會影響應(yīng)用的正常全屏娜遵,短暫調(diào)出的狀態(tài)欄和導(dǎo)航欄會呈半透明狀態(tài)蜕衡,并且在一段時間內(nèi)或者用戶與應(yīng)用內(nèi)元素進行互動的情況下自動隱藏。
這個新加入的特性理所當(dāng)然地受到了廣泛好評:從此 Android 終于可以在全屏應(yīng)用下不影響用戶的正常操作了慨仿,難怪 Android Developers 頁面中會這么描述 Immersive Full-Screen Mode:
...lets your app go truly "full screen."
當(dāng)然,講了這么多有關(guān)“沉浸模式”的介紹纳胧,目的并不是要告訴你“沉浸模式”有多么多么好镰吆,而是為了告訴你,目前你們所說的“支持沉浸模式”“沉浸狀態(tài)欄”等等跑慕,和真正的“沉浸模式”万皿,即 Immersive Full-Screen Mode 是一點關(guān)系都沒有的。
接下來我要告訴你們,你們口中的“沉浸”究竟是個什么東西牢硅。
“沉浸狀態(tài)欄”究竟是什么慰于?
Google 在 Android 4.4 的 API 描述頁面里提到了“Translucent system UI styling”,即半透明化的系統(tǒng)UI風(fēng)格唤衫。
這個“半透明化”包括了狀態(tài)欄和通知欄婆赠,當(dāng)開發(fā)者讓應(yīng)用支持這個新特性的時候,狀態(tài)欄和導(dǎo)航欄可以單獨/同時變?yōu)闈u變的半透明樣式佳励。
說到這里大家應(yīng)該都明白了——沒錯,這就是你們口中經(jīng)常提到的“沉浸模式”“沉浸狀態(tài)欄”赃承。記住了妙黍,他們的學(xué)名是"Translucent Bars",透明欄瞧剖,包括了狀態(tài)欄(Translucent status bar)和導(dǎo)航欄(Translucent navigation bar)拭嫁。
在 Android 5.0 之后引入了 Material Design,狀態(tài)欄和導(dǎo)航欄也玩出了更多花樣∽ビ冢現(xiàn)在除了原有的“半透明”模式以外做粤,還有“全透明”以及“變色”模式,一種會完全隱藏背景捉撮,另一種可以取色作為背景顏色怕品。
有關(guān)更多 Material Design 中關(guān)于系統(tǒng)欄的描述可以參考這里
總結(jié)
如果你認真看到了這里巾遭,那么你應(yīng)該明白了一個重要的事情:此“沉浸”非彼“沉浸”肉康。
真正的沉浸模式,指的是一種全屏模式灼舍,而你一般在開發(fā)者/愛好者/用戶那里聽到的“沉浸模式”絕大部分情況下指的是“半透明欄”或者是 Android 5.0 之后加入的“全透明/變色欄”吼和。至于所謂“沉浸式狀態(tài)欄/導(dǎo)航欄”之類的描述,則完全是無稽之談骑素。
關(guān)于國人對于“半透明欄”和“沉浸模式”之間的誤解是怎么產(chǎn)生的炫乓,我并不清楚,或許是當(dāng)時某個科技網(wǎng)站的小編理解錯誤砂豌,翻譯新聞時將兩個東西扯在了一起厢岂;也或許是某個開發(fā)者在介紹透明欄時誤以為“沉浸模式”是恰當(dāng)?shù)姆g,但總之阳距,錯并不是問題塔粒,知錯不改才是問題。
如果你能理解這一點筐摘,請再也不要弄混這兩個完全不一樣的東西了卒茬。