Android 沉浸式模式與常見狀態(tài)欄和導(dǎo)航欄效果

Android沉浸式模式

官方稱沉浸式狀態(tài)欄為沉浸式模式。

  • 什么是沉浸式?
    沉浸式就是讓人專注當(dāng)前的(由設(shè)計者營造)情境下感到愉悅和滿足,而忘記真實的情境。

  • 什么是Android中的沉浸式?
    當(dāng)啟用該模式,應(yīng)用程序的界面將占據(jù)整個屏幕,自動隱藏系統(tǒng)的狀態(tài)欄和導(dǎo)航欄,讓應(yīng)用程序內(nèi)容可以在最大顯示范圍呈現(xiàn),增加大屏體驗,而當(dāng)需要查看通知的時候只需要從頂部向下滑動就能呼出通知欄。

  • 一個應(yīng)用程序界面有有如下元素:


  • 而打造沉浸式模式的用戶體驗就是要將這些系統(tǒng)元素全部隱藏,只留下主題內(nèi)容部分。先看一下效果圖:


進入程序時,自動隱藏了狀態(tài)欄和導(dǎo)航欄。當(dāng)用戶從頂部向下滑動就能呼出半透明的狀態(tài)欄和導(dǎo)航欄。

具體代碼如下:

public class MainActivity extends AppCompatActivity {
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        View mDecorView = getWindow().getDecorView();

        mDecorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        );
    }

}
  • 上面使用的SYSTEM_UI_FLAG_IMMERSIVE_STICKY官方稱為粘性沉浸式模式。View.SYSTEM_UI_FLAG_IMMERSIVE為非粘性沉浸式,非粘性沉浸式狀態(tài)欄和導(dǎo)航欄顯示后不再自動隱藏。

注意:onWindowFocusChanged方法里面的代碼不能直接寫在onCreate方法中,如果這么寫當(dāng)應(yīng)用處于后臺Stoped狀態(tài),下次啟動應(yīng)用便執(zhí)行不到處理沉浸式的代碼。Activity生命周期中,真正的visible時間點是onWindowFocusChanged()函數(shù)被執(zhí)行時,所以我們將這段代碼寫在這個方法中。

可以參考官方文檔:https://developer.android.google.cn
中文翻譯版:http://hukai.me/android-training-course-in-chinese

其他常見狀態(tài)欄和導(dǎo)航欄效果

  • 隱藏ActionBar
ActionBar actionBar = getSupportActionBar();
actionBar.hide();

上面的代碼需要在放在setContentView方法之前,否則會出現(xiàn)ActionBar顯示后再隱藏。如果整個應(yīng)用沒有用到ActionBar我們可以直接在AndroidManifest.xml中將application的theme設(shè)置為NoActionBar,如果只是某個activity不用也可以將這個activity的theme設(shè)置為NoActionBar。

<activity android:name=".MainActivity"
     android:theme="@style/Theme.AppCompat.Light.NoActionBar">
     <intent-filter>
           <action android:name="android.intent.action.MAIN"/>
         <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

效果圖如下:

  • 透明狀態(tài)欄和導(dǎo)航欄
//透明狀態(tài)欄和導(dǎo)航欄,隱藏ActionBar
getSupportActionBar().hide();

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().setStatusBarColor(Color.TRANSPARENT);

效果圖如下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容