優(yōu)化狀態(tài)欄沉浸顯示

需求背景

應用啟動頁一般要全屏顯示,使用全屏的引導頁來增強顯示效果专酗。 今天我們研究一下如何實現(xiàn)全屏引導頁睹逃,以及過程中遇到的問題,對應的解決方案。

實現(xiàn)方案

方案一

第一步沉填,我們定義顯示樣式疗隶,打開styles.xml文件,定義AppTheme.NoActionBar與AppTheme.Launcher:

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.Launcher" parent="AppTheme.NoActionBar">
    <item name="android:windowBackground">@color/colorPrimaryDark</item>
</style>

樣式中翼闹,windowBackground設置整個窗口背景斑鼻,可以設置color色值或者drawable資源。 第二步猎荠,Activity配置該主題樣式:

<activity
    android:exported="true"
    android:name=".activity.GuideActivity"
    android:theme="@style/AppTheme.Launcher">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
···
第三步坚弱,打開啟動頁GuideActivity代碼,在onCreate中設置全屏顯示:
···
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.AppTheme_Launcher);
    getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    setContentView(R.layout.activity_guide);
}

此時我們安裝关摇、運行應用荒叶,看到應用確實全屏展示了。 但是同時也會有一些問題输虱,在手機最上部狀態(tài)欄顯示全黑些楣,如下如所示:

狀態(tài)欄黑條

我們希望全屏顯示,當然狀態(tài)欄也要包含在內(nèi)宪睹,否則狀態(tài)欄很突兀愁茁。 仔細研發(fā),發(fā)現(xiàn)出現(xiàn)該問題原因是因為劉海屏亭病,所以我們兼容一下劉海屏:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.AppTheme_Launcher);
    fitsNotchScreen();
    getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    setContentView(R.layout.activity_guide);
}

/**
 * 適配劉海屏
 */
private void fitsNotchScreen() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
        getWindow().setAttributes(lp);
    }
}

此時再次打開應用鹅很,發(fā)現(xiàn)狀態(tài)欄全黑的背景消失了。效果如下:


優(yōu)化效果

該方案優(yōu)勢:無需引入三方資源命贴,減少方法數(shù)量和代碼冗余道宅,規(guī)范代碼結(jié)構(gòu)食听。

方案二

下面再說一個簡單的方式胸蛛,我們可以直接使用開源兼容庫Immersionbar,它是一個第三方的類庫,用于 android 4.4以上沉浸式實現(xiàn)樱报。具體項目介紹和復雜的使用可以參考Github項目說明文檔和使用文檔葬项。 我下面就簡單介紹實現(xiàn)引導頁全屏的沉浸式方案。使用方案二實現(xiàn)迹蛤,不用進行方案一相關(guān)的調(diào)整民珍、改造〉领可以直接按照下面方式實現(xiàn): 第一步嚷量,在build.gradle添加項目依賴:

implementation 'com.gyf.immersionbar:immersionbar:2.3.3'  //沉浸式桌面

第二步,找到應用引導頁GuideActivity逆趣,修改onCreate方法蝶溶,添加ImmersionBar實現(xiàn):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.AppTheme_Launcher);
    ImmersionBar.with(this).transparentBar().init();
    getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    setContentView(R.layout.activity_guide);
}

此時,改造就完成了,效果和方案一相同抖所。 該方案優(yōu)勢:兼容了各類國產(chǎn)型號手機梨州,無需各機型分別適配。 全屏顯示效果:

最終效果

項目代碼參考:睡眠助理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末田轧,一起剝皮案震驚了整個濱河市暴匠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌傻粘,老刑警劉巖每窖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抹腿,居然都是意外死亡岛请,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門警绩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崇败,“玉大人,你說我怎么就攤上這事肩祥『笫遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵混狠,是天一觀的道長岸霹。 經(jīng)常有香客問我,道長将饺,這世上最難降的妖魔是什么贡避? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮予弧,結(jié)果婚禮上刮吧,老公的妹妹穿的比我還像新娘。我一直安慰自己掖蛤,他們只是感情好杀捻,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚓庭,像睡著了一般致讥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上器赞,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天垢袱,我揣著相機與錄音,去河邊找鬼港柜。 笑死请契,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姚糊,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贿衍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了救恨?” 一聲冷哼從身側(cè)響起贸辈,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肠槽,沒想到半個月后擎淤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡秸仙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年嘴拢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寂纪。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡席吴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捞蛋,到底是詐尸還是另有隱情孝冒,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布拟杉,位于F島的核電站庄涡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏搬设。R本人自食惡果不足惜穴店,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拿穴。 院中可真熱鬧泣洞,春花似錦、人聲如沸贞言。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽该窗。三九已至,卻和暖如春蚤霞,著一層夾襖步出監(jiān)牢的瞬間酗失,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工昧绣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留规肴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像拖刃,于是被迫代替她去往敵國和親删壮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

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