何為沉浸模式,沉浸式頂欄,變色龍狀態欄?

沉浸模式是Android 4.4的特性

當啟用該模式,應用程序的界面將佔據整個屏幕,系統自動將隱藏系統的狀態欄和導航欄,讓應用程序內容可以在最大顯示範圍呈現,增加大屏體驗,而當需要查看通知的時候只需要從頂部向下滑動就能呼出通知欄。

這是谷歌對於自己的沉浸模式的解釋,說白了就是全屏擴展唄。

但是總有人說下面這樣就是沉浸式頂欄,我總覺得他們說的不對,那不就是狀態欄的顏色自適應么,叫彩色狀態欄,變色龍狀態欄都行,沉浸不是這個意思啊。


沉浸模式對應的是 Immersive Mode, 呈現的形式是全屏狀態, 隱藏狀態欄與導航欄.

關於沉浸式的更多描述參見: Immersive (Android Design).

所謂的沉浸式頂欄, 更多是國內對 Translucent Bar 的誤傳: 為什麼在國內會有很多用戶把 ?透明欄?(Translucent Bars)稱作 ?沉浸式頂欄??

Translucent Bar, 中文譯名: 透明欄. 一般呈現的是狀態欄和/或導航欄透明或半透明. 最極端的例子是在 Muzei 這樣的應用上:

關於透明欄的更多描述參見: System Bars (Material Design).

變色龍狀態欄那, 是國內一些用戶對變色狀態欄的稱呼. 來源於某個 Xposed 插件.


沉浸和變色,一個很古老的話題了,因為近期在學習Android,外加我個人對UI體驗的偏執,把這部分代碼也都學習並測試過,糾正了以往錯誤的觀點,也希望能糾正至今為止依舊很多人錯誤的觀點。。

首先,我用中文列出幾個概念;「沉浸」(Immersive),「透明」(Translucent),「變色」,「狀態欄」(StatusBar),「導航欄」(NavigationBar)。。另外最後還會提到「全屏」之類的。。

簡單來說,「沉浸」和「透明」都是Android4.4加入的新特性,也就是判斷VERSION.SDK必須大於或等於API 19,調用才會生效,這一點4.4和5.0包括6.0在使用方法及具體實現代碼上都沒有區別(但顯示效果略有區別,原因其一是Android4.4存在上下陰影的影響)。。

設置「透明」主要有兩個方法,在xml主題文件裡面設置和在源代碼裡面調用setFlags()方法(這個方法一直都有,只不過「透明」這個flag是4.4才加入進去的),效果一樣,代碼也很簡單,包括「狀態欄」和「導航欄」都可以選擇透明化。

設置「沉浸」則可以在源代碼裡面調用setSystemUiVisibility()方法(這個方法也是一直都有,只不過4.4加入了兩個新的flag用來獲得「沉浸」效果),代碼量比設置「透明」略多,但也不過十幾行而已。

而「變色」在Android上是從來就不存在的一個概念!!只是大家根據app顯示效果自己YY出來的一個詞。在API 19(Android4.4)裡面,Google僅僅提供了「透明」這個方法,但是很多開發者發現,在開發過程中如果使用的是帶有深色ActionBar的主題,這時對「狀態欄」的透明會帶來極其醜陋不協調的顯示效果,像這個樣子(圖片來源網路,黑色的那一欄就是ActionBar):

於是大家借鑒iOS7的靈感,可否將「狀態欄」顏色設置和ActionBar一樣呢?很遺憾,API 19沒有提供單獨設置「狀態欄」顏色的方法(這句話很重要)。。那麼問題又來了,我們平時使用的那些在Android4.4上依舊能「變色」的app是怎樣實現的呢?那就得感謝程序猿的小聰明了,比如:

「我如果可以把View的最上端設置出一定高度的顏色(或者圖案),具體高度只要大於等於「狀態欄」高度即可,那麼已經「透明」了的「狀態欄」自然而然就會變成這個顏色(或者圖案),而我只需要從一開始就把那種顏色設置為和ActionBar一樣就可以了。」

這就好比官方只給了我麵粉和肉,程序猿可以想辦法做出餃子。。。由於這種變色龍式的顯示需求太普遍,我們也不想每次都機械地寫同樣的這幾十行代碼,因此有大牛就寫了一個開源庫,只要用幾行代碼簡單地調用這個庫就夠了,目前,Github上就有這樣一個jar開源庫:SystemBarTint,國內很多開發者就可以簡單地使用並達到「變色」效果了,當然了,還有其他很多的方法也能達到這個效果(好比你做餃子,我做包子),這就是寫代碼的靈活。。

「變色」講完了,在Android4.4中,我們看似簡單的變色,其實實現起來並沒有「透明」那麼簡單。

有些人所說的「彩色狀態欄」和「單色狀態欄」,在4.4中實現原理都是「透明」!!而不是你們自己理解的一個是「透明」,一個是「變色」。。

Google似乎也意識到了這一點,於是在Android5.0(API 21)中,加入了一個新的特性;單獨設置「狀態欄」顏色!!(即colorPrimaryDark)

,與此同時,ActionBar升級成了ToolBar,其顏色標籤為colorPrimary。。

從字面區別Dark上看,Google似乎推薦我們把「狀態欄」的顏色設置地比ToolBar更深一點,當然,決定權在程序猿手裡,你甚至能設置成兩個風馬牛不相及的顏色,結果顯然會很醜嘍,哈哈。

另外,有人自造了兩個詞「沉浸式狀態欄」和「變色龍式狀態欄」,自以為是地說前者是「狀態欄」和ToolBar顏色一模一樣,後者則是一深一淺。。純屬無稽之談。。根本沒這兩個概念。。那隻不過是設置的16進位顏色RGB值一樣和不一樣的區別而已。。。

當然,Google推薦我們把顏色值設置成「一深一淺」,而不是一模一樣。。這也是為什麼很多Google官方應用在5.0及更高版本的設備上顯示效果「兩欄分明,一深一淺」,如圖:

這時候,「變色」的原理變成了單獨設置其顏色,比4.4方便很多。。

扯了這麼多,我概括一下就是:官方只有「沉浸」和「透明」這兩個概念,且只支持Android4.4及以上。「變色」是非官方說法,是基於「透明」演化而來,並且從實現原理上看,不論是4.4還是5.0,「變色」這種叫法都很不恰當。。最後,Android5.0引入了單獨設置狀態欄顏色的方法。。

並且,「沉浸」和「變色」,「沉浸」和「透明」根本半毛錢關係都沒有。。

在官方文檔中,「沉浸」和「全屏」是綁定的。。

很多人的誤傳也就來源於這裡。。

接下來說到「全屏」,於是又來了一個爭議點,「全屏」到底是Android4.X哪個版本引入的,有人說4.0,有人說4.1,有人斬釘截鐵的說是4.4。

官方叫法中,「全屏」(FULLSCREEN)從1.X時代過來一直都有,只不過4.0之前只能隱藏「狀態欄」(那是因為4.0之前沒有「導航欄」,哈哈哈哈哈哈),4.0開始出現「導航欄」,很多人認為,Google這個時候還沒有允許用戶隱藏它,直到4.4時代,Google才開放了這個介面,實際不然:

Google在4.0時(亦或是4.1)已經可以隱藏「導航欄」(即虛擬按鍵)進入完全全屏模式了,只不過這種全屏無法實現再次隱藏,如果不小心把「導航欄」滑出來,需要退出該Activity重新進入才能再次全屏。。舉例:某雲直播app在2014年的某版本沒有root許可權即可實現「全屏」。

其中一種實現代碼是:

int x = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;

decorView.setSystemUiVisibility(x);

當然,這種方法在4.4得到了加強,也就是更強大的全屏方案---「沉浸」!!

具體是在setSystemUiVisibility()方法裡面加入了兩個新的flag: View.SYSTEM_UI_FLAG_IMMERSIVE和View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

結論:「全屏」並非4.4才引入的,4.0即可實現!但是真正穩定的「全屏」模式是「沉浸」!!只有這個模式才是完美全屏(支持手動和自動隱藏,而不用退出重進),且必須Android4.4及以上版本。

這就是爭議點的來源,(「沉浸」具體分兩種,一般我們遇到的屬於自動隱藏型,即帶有Sticky粘性標籤的「沉浸」,就不展開了。)。

「沉浸」的特點是一定是在第一次進入會有兩個藍色提示氣泡。

至此為止,應該沒人搞混「沉浸」和「變色」了吧。

「沉浸」是屬於「全屏」的,是一種相對來說更加完美的「全屏」模式,和「透明」沒有關係,唯一一樣的是都需要Android4.4及更高版本。。


翻到了知乎上的另一個問題 什麼是沉浸式設計?它有什麼具體特點?

從中看到的歐陽希先生的回答覺得長知識了。

以下:

沉浸→沉浸式體驗→沉浸式設計?Andriod4.4沉浸模式

沉浸就是讓人專註在當前的目標(由設計者營造)情境下感到愉悅和滿足,而忘記真實世界的情境。

沉浸式體驗的內容

沉浸式體驗往往即包括人的感官體驗,又包括人的認知體驗。

  • 感官體驗:例如遊樂場,迪斯尼主題樂園,很多活動對人有一定挑戰,但是主要是利用人的感官體驗,讓人從而感覺到爽或者刺激。但是利用感官刺激達到心流狀態,很難維持長久。
  • 認知體驗:例如下棋,掃雷等等策略遊戲,又如教學這些活動對人的技能與挑戰匹配主要利用人的認知經驗。

而事實證明,即包含豐富的感官經驗,又包含豐富的認知體驗的活動才能創造最令人投入的心流。

何為沉浸式設計?

依據之前的敘述,那麼我們可以將為了沉浸式(心流)而進行的設計可以稱之為沉浸式設計(為心流而設計)。

而沉浸式設計的例子通常就是隱藏狀態欄以及導航欄等元素,將用戶所關注的內容最大程度的呈現於屏幕之上。

另外還有如豌豆莢手機版上的主界面,

在向下滑動進入應用的瀏覽時,上方的搜索框與按鈕就隨動畫進入了沉浸。

沉浸模式就是突出內容,排除干擾,對界面除內容以外的東西儘可能的進行圓潤的簡化,從而讓用戶沉浸在其中吧。

這就是看了他們講解之後的我的理解。


(20150906更新 個人理解,和谷歌的官方文檔有點不符合)

原生沉浸式狀態欄是安卓5.0後引入的一個新API(應用程序介面),它能夠讓應用對狀態欄區域的顏色進行設置,令狀態欄顏色和應用的顏色達到一體化的效果,增加視覺體驗。

狀態欄變色龍是一款以Xposed為框架的插件,它可以將狀態欄的顏色和正在運行的應用程序的顏色調整為一體,實現更好的視覺效果。

  1. 沉浸式:全屏模式,通知欄隱藏,即全屏,部分應用打開時會出現
  2. 沉浸式狀態欄
  3. 變色龍式狀態欄:將狀態欄本身的背景全透明化,同時改變應用窗口頂部的顏色。這樣能在切換應用窗口時,完成同步變色,並且將色彩一體感做得比原生系統更徹底。既保證頂欄應用圖標和文字清晰顯示,又將頂欄的顏色與下部的顏色無縫連接起來。將動靜態之間的效果調整恰當,讓整體的視覺顯得流暢。

  4. 透明通知欄:MIUI V5這類的老系統,雖然是Android4.2,但是桌面還是能透明的。

在動態切換上,原生沉浸式優於變色龍。變色龍改變的是狀態欄本身的背景顏色,而Android的狀態欄是一個單獨的窗口,無法和應用窗口的動畫做到完全同步,因此變色龍狀態欄本身背景顏色變化的時候,無法做到整塊顏色的同步切換,會出現和應用窗口內顏色銜接不連貫的情況。

在靜態畫面展示上,變色龍卻優於原生沉浸式。變色龍在靜態畫面中的顏色是一體化的,而原生沉浸式的頂欄的會增加一層陰影,用來突出狀態欄處白色的文字和圖標,但這使得原生沉浸式在靜態畫面中呈現出割裂感,帶來的視覺體驗不是很好。

沉浸式狀態欄示例:

變色龍通知欄示例:

透明狀態欄示例:

沉浸模式:

 Google在安卓4.0發布的同時,提出了Android Design設計規範。Holo風的出現,讓當時亂得像雞窩一樣的安卓換了血,重獲新生的安卓飽受好評——但作為Android Design重要因素的Navigation Bar也就是屏幕虛擬鍵除外。人們覺得,安卓4.0以來引進的屏幕虛擬鍵佔用了屏幕空間,反正怎麼看怎麼礙眼。屏幕虛擬鍵到底好不好,現在仍有爭議,不過Google已經在安卓4.4中著重減少爭議度了。安卓4.4引入了「沉浸模式」(Immersive Mode),解決了Navigation Bar佔用屏幕空間的問題。

在,無論您是要讀書、玩遊戲還是看電影,全新的沉浸模式都可以讓您全身心沉浸其中。只需滑動屏幕邊緣,即可重新顯示狀態欄和導航按鈕。

目前還有很多第三方App未沉浸式,例如知乎,希望未來的系統能一統規範。


沉浸式是為了專註於用戶使用的功能,隱藏一些不必要的view,透明狀態欄只是好看,變色龍就是一個插件。


先佔個坑

沉浸式設計

是一種通過簡化界面元素來平衡用戶體驗和內容的一種設計走向

核心的設計思想有

「內容為王」

「Do Not Disturb」

這種約束下的設計就是沉浸式。

谷歌的解釋太坑


推薦閱讀:

有什麼讓人看不厭的界面設計?
如何在2017獲得追波邀請碼?dribbble?
如何評價 Adobe Photoshop CC 2015 ?
怎樣評價 Infobar A02 手機 iida UI 2.0 的 UI 設計?
這個流程圖是用什麼軟體做出來的?

TAG:用戶界面設計 | Android | 沉浸式設計 | 狀態欄statusbar |