SystemUI Flag詳解及使用情景

1床佳、能夠造成SystemUI Flag被系統(tǒng)自動(dòng)清除的交互分類

  1. 觸摸屏幕的任何位置;
  2. 頂部下拉狀態(tài)欄治笨;
  3. 底部上拉導(dǎo)航欄;
  4. Window的變化(如:跳轉(zhuǎn)到其他頁面赤嚼、軟鍵盤的彈出)

2旷赖、SystemUI Flag 相關(guān)特性詳解

  • 1、View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:(>=api16)
    作用:隱藏系統(tǒng)的NavigationBar更卒。
    但是用戶的任何操作都會(huì)清除這個(gè)Flag等孵,進(jìn)而導(dǎo)航欄自動(dòng)重新顯示起來。同時(shí)View.SYSTEM_UI_FLAG_FULLSCREEN也會(huì)被自動(dòng)清除逞壁,因此StatusBar也會(huì)同時(shí)顯示出來流济。
  • 2、View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:(>=api16)
    作用:不會(huì)隱藏導(dǎo)航欄腌闯,但是頁面布局會(huì)延伸到NavigationBar下面绳瘟,被NavigationBar遮擋。
    • 設(shè)置此Flag時(shí)姿骏,設(shè)置View的fitSystemWindows=true糖声,會(huì)給該View添加和NavigationBar高度相同的paddingBottom。
  • 3、View.SYSTEM_UI_FLAG_FULLSCREEN:(>=api16)
    作用:隱藏狀態(tài)欄蘸泻。
    和WindowManager.LayoutParams.FLAG_FULLSCREEN有相同的展示效果琉苇。不同的在于,此flag一般用于暫時(shí)全屏的情形(如:閱讀應(yīng)用悦施、全屏視頻)并扇,如果需要一直停留在全屏狀態(tài),(如:游戲應(yīng)用)抡诞,使用WindowManager.LayoutParams.FLAG_FULLSCREEN則是更好的選擇穷蛹。
    此Flag會(huì)因?yàn)楦鞣N的交互(如:跳轉(zhuǎn)到其他應(yīng)用,下拉StatusBar,彈出鍵盤)的發(fā)送而被系統(tǒng)清除昼汗。
  • 4肴熏、View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:(>=api16)
    作用:不會(huì)隱藏狀態(tài)欄,但是頁面布局會(huì)延伸到狀態(tài)欄下面顷窒,被statusBar遮擋蛙吏。
    • 設(shè)置此flag時(shí),設(shè)置View的fitSystemWindows=true鞋吉,會(huì)給該View添加和statusBar相同高度的paddingTop.
  • 5鸦做、 View.SYSTEM_UI_FLAG_LAYOUT_STABLE:(>=api16)
    作用:穩(wěn)定布局。
    - 當(dāng)使用SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN或SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION時(shí)坯辩,此時(shí)如果給View添加fitSystemWindows=true馁龟,系統(tǒng)會(huì)自動(dòng)為View添加狀態(tài)欄高度的paddingTop和NavigationBar高度的paddingBottom,如果狀態(tài)欄或Navigationbar隱藏漆魔,則View的padding會(huì)變成0坷檩,視覺上會(huì)看到閃爍。如果配合View.SYSTEM_UI_FLAG_LAYOUT_STABLE使用改抡,即使?fàn)顟B(tài)欄或NavigationBar隱藏矢炼,View的padding依然不變,這就是穩(wěn)定布局的意思阿纤。
    • 當(dāng)使用SYSTEM_UI_FLAG_FULLSCREEN |SYSTEM_UI_FLAG_LAYOUT_STABLE時(shí)句灌,會(huì)隱藏狀態(tài)欄,但狀態(tài)欄所占的控件不會(huì)隱藏欠拾,只會(huì)變成白色胰锌。同時(shí)Activity頁面不會(huì)延伸到狀態(tài)欄下。若是加上SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN藐窄,View所在window的顯示范圍則會(huì)伸展到StatusBar所在的空間资昧。
  • 6、View.SYSTEM_UI_FLAG_IMMERSIVE:(>=api19)
    作用:避免某些用戶交互造成系統(tǒng)自動(dòng)清除全屏狀態(tài)荆忍。
    • View.SYSTEM_UI_FLAG_IMMERSIVE和View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY的使用主要是為了當(dāng)設(shè)置全屏模式時(shí)格带,避免某些用戶交互造成系統(tǒng)自動(dòng)清除全屏狀態(tài)撤缴。
  • 當(dāng)使用View.SYSTEM_UI_FLAG_HIDE_NAVIGATION隱藏導(dǎo)航欄時(shí),配合此特性叽唱,只有第三屈呕、四種操作會(huì)導(dǎo)致導(dǎo)航欄的隱藏狀態(tài)被系統(tǒng)自動(dòng)清除;否則棺亭,任何交互都不會(huì)導(dǎo)致導(dǎo)航欄的隱藏狀態(tài)被系統(tǒng)自動(dòng)清除虎眨。
  • 此標(biāo)識(shí)只有配合View.SYSTEM_UI_FLAG_HIDE_NAVIGATION才有作用。
  • 7镶摘、View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:(>=api19)
    作用:避免某些用戶交互造成系統(tǒng)自動(dòng)清除全屏狀態(tài)专甩。同時(shí)Activity的部分內(nèi)容也因此被StatusBar覆蓋遮擋。
    • 用View.SYSTEM_UI_FLAG_HIDE_NAVIGATION隱藏導(dǎo)航欄钉稍,配合使用此Flag,只有用戶的第四種操作會(huì)導(dǎo)致狀態(tài)欄或(和)導(dǎo)航欄的隱藏狀態(tài)被系統(tǒng)自動(dòng)清除。否則任何交互都不會(huì)導(dǎo)致相應(yīng)狀態(tài)的清除棺耍。
  • 此Flag只有配合SYSTEM_UI_FLAG_FULLSCREEN和SYSTEM_UI_FLAG_HIDE_NAVIGATION使用時(shí)才會(huì)起作用贡未。

3、WindowManager 相關(guān)特性詳解

  • 1蒙袍、WindowMananger.FLAG_TRANSLUCENT_STATUS: (>=api16)
    作用:
    • 設(shè)置半透明的狀態(tài)欄俊卤。不會(huì)因?yàn)橛脩舨僮鞫宄?/li>
    • 設(shè)置此屬性,系統(tǒng)會(huì)自動(dòng)同時(shí)設(shè)置View.SYSTEM_UI_FLAG_LAYOUT_STABLE和View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN這兩個(gè)屬性害幅。
  • 2消恍、WindowMananger.FLAG_FULLSCREEN:
    作用:
    • 隱藏狀態(tài)欄。
    • 使用此屬性為導(dǎo)致軟鍵盤的SOFT_INPUT_ADJUST_RESIZE的特性失效以现。 暫時(shí)沒遇到此問題狠怨。
  • 3、WindowMananger.FLAG_TRANSLUCENT_NAVIGATION:
  1. 半透明NavigationBar,并且不會(huì)因用戶交互而被清除邑遏。
  2. 設(shè)置了此flag,系統(tǒng)會(huì)自動(dòng)設(shè)置View.SYSTEM_UI_FLAG_LAYOUT_STABLE和View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    最低版本支持:Android4.4 (api 19)
  • 4佣赖、WindowMananger.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS:
  1. 用于為StatusBar和NavigationBar設(shè)置背景顏色。
  2. 原理:將StatusBar和NavigationBar設(shè)置為透明背景记盒,并且將StatusBar和NavigationBar所在空間設(shè)置為Window.getStatusBarColor() 和Window.getNavigationBarColor()方法獲得的顏色憎蛤。
    最低版本支持:Android5.0 (api 21)。
    我們給狀態(tài)欄和導(dǎo)航欄著色的方法如下:
 getWindow().setStatusBarColor(Color.RED);
  getWindow().setNavigationBarColor(Color.RED);

如果在styles中配置這個(gè)屬性android:windowDrawsSystemBarBackgrounds=false:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    </style>

會(huì)導(dǎo)致給狀態(tài)欄和導(dǎo)航欄著色失效纪吮。
再看另外一種場(chǎng)景:我們?cè)诮鉀QApp啟動(dòng)時(shí)的黑屏的問題的解決方案如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash</item>
        <item name="android:windowFullscreen">true</item>
        <!--不讓windowBackground延申到navigation bar區(qū)域-->
        <!--<item name="android:windowDrawsSystemBarBackgrounds">false</item>-->
        <!--適配Android P劉海屏-->
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>

很簡(jiǎn)單就是給window設(shè)置一個(gè)背景俩檬,但是在含有導(dǎo)航欄的手機(jī)來說,背景會(huì)被其遮擋碾盟。

閃屏.png

圖中藍(lán)色框中的logo就是設(shè)置的背景棚辽,綠色框中l(wèi)ogo是頁面中的內(nèi)容。具體實(shí)現(xiàn)可以去看
Android Splash Screen最佳實(shí)踐巷疼,包含全面屏晚胡,劉海屏適配灵奖。很明顯的看出設(shè)置的背景被導(dǎo)航欄,遮擋了估盘,怎么解決呢瓷患?
可以設(shè)置屬性android:windowDrawsSystemBarBackgrounds=false。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遣妥,一起剝皮案震驚了整個(gè)濱河市擅编,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箫踩,老刑警劉巖爱态,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異境钟,居然都是意外死亡锦担,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門慨削,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洞渔,“玉大人,你說我怎么就攤上這事缚态〈沤罚” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵玫芦,是天一觀的道長(zhǎng)浆熔。 經(jīng)常有香客問我,道長(zhǎng)桥帆,這世上最難降的妖魔是什么医增? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮老虫,結(jié)果婚禮上调窍,老公的妹妹穿的比我還像新娘。我一直安慰自己张遭,他們只是感情好邓萨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菊卷,像睡著了一般缔恳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洁闰,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天歉甚,我揣著相機(jī)與錄音,去河邊找鬼扑眉。 笑死纸泄,一個(gè)胖子當(dāng)著我的面吹牛赖钞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聘裁,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雪营,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了衡便?” 一聲冷哼從身側(cè)響起献起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镣陕,沒想到半個(gè)月后谴餐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呆抑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年岂嗓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹊碍。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摄闸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妹萨,到底是詐尸還是另有隱情,我是刑警寧澤炫欺,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布乎完,位于F島的核電站,受9級(jí)特大地震影響品洛,放射性物質(zhì)發(fā)生泄漏树姨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一桥状、第九天 我趴在偏房一處隱蔽的房頂上張望帽揪。 院中可真熱鬧,春花似錦辅斟、人聲如沸转晰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽查邢。三九已至,卻和暖如春酵幕,著一層夾襖步出監(jiān)牢的瞬間扰藕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工芳撒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邓深,地道東北人未桥。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像芥备,于是被迫代替她去往敵國(guó)和親冬耿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354