Android隱藏和沉浸式虛擬按鍵NavigationBar的實(shí)現(xiàn)方法
有的時(shí)候我們?cè)谧鋈溜@示或者視頻全屏播放時(shí)候,有些手機(jī)有底部的虛擬按鍵,如下圖所示:

在開發(fā)中我們會(huì)遇到需要隱藏虛擬按鍵或者沉浸式虛擬按鍵的需求。

上圖為沉浸式虛擬按鍵效果。

上圖為隱藏虛擬按鍵效果。
那我們先說如何隱藏虛擬按鍵:
public static void hideNavKey(Context context) {
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
View v = ((Activity) context).getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
} else if (Build.VERSION.SDK_INT >= 19) {
//for new api versions.
View decorView = ((Activity) context).getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
}
}
主要是幾個(gè)標(biāo)簽的使用。那先看下這些標(biāo)簽的作用和含義吧。
當(dāng)使用了SYSTEM_UI_FLAG_IMMERSIVE_STICKY標(biāo)簽的時(shí)候,向內(nèi)滑動(dòng)的操作會(huì)讓系統(tǒng)欄臨時(shí)顯示,并處于半透明的狀態(tài)(沉浸式)。此時(shí)沒有標(biāo)簽會(huì)被清除,系統(tǒng)UI可見性監(jiān)聽器也不會(huì)被觸發(fā),布局的大小不會(huì)被影響。如果用戶沒有進(jìn)行操作,系統(tǒng)欄會(huì)在一段時(shí)間內(nèi)自動(dòng)隱藏。
當(dāng)你使用SYSTEM_UI_FLAG_IMMERSIVE標(biāo)簽的時(shí)候,它是基于其他設(shè)置過的標(biāo)簽(SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN)來隱藏系統(tǒng)欄的。當(dāng)用戶向內(nèi)滑動(dòng),系統(tǒng)欄重新顯示并保持可見。但是布局大小會(huì)被虛擬按鍵的高度所影響。
如果你不想虛擬按鍵影響高度。可以用如下:
用其他的UI標(biāo)簽(如SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION和SYSTEM_UI_FLAG_LAYOUT_STABLE)來防止系統(tǒng)欄隱藏時(shí)內(nèi)容區(qū)域大小發(fā)生變化是一種很不錯(cuò)的方法。你也需要確保Action Bar和其他系統(tǒng)UI控件同時(shí)進(jìn)行隱藏。下面這段代碼展示了如何在不改變內(nèi)容區(qū)域大小的情況下,隱藏與顯示狀態(tài)欄和導(dǎo)航欄。
那么如何顯示虛擬按鍵呢?往下看:
public static void showNavKey(Context context, int systemUiVisibility) {//getWindow().getDecorView().getSystemUiVisibility() 傳入0也可以
((Activity) context).getWindow().getDecorView().setSystemUiVisibility(systemUiVisibility);
}
以上這篇Android隱藏和沉浸式虛擬按鍵NavigationBar的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
android開機(jī)自啟動(dòng)原理與實(shí)現(xiàn)案例(附源碼)
完成一下步驟后,啟動(dòng)一次程序,完成注冊(cè)。等下次手機(jī)開機(jī)時(shí),該軟件即會(huì)自動(dòng)啟動(dòng),具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06
詳解Androidstudio3.0 關(guān)于Gradle報(bào)錯(cuò)的問題(小結(jié))
本篇文章主要介紹了詳解Androidstudio3.0 關(guān)于Gradle報(bào)錯(cuò)的問題(小結(jié)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android 去掉自定義dialog的白色邊框的簡(jiǎn)單方法
這篇文章介紹了Android 去掉自定義dialog的白色邊框,有需要的朋友可以參考一下2013-09-09
Android自定義控件ViewGroup實(shí)現(xiàn)標(biāo)簽云(四)
這篇文章主要為大家詳細(xì)介紹了Android自定義控件ViewGroup實(shí)現(xiàn)標(biāo)簽云的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
Flutter?頁(yè)面跳轉(zhuǎn)和傳值的實(shí)現(xiàn)
跳轉(zhuǎn)傳值是再普通不過的小功能了,在開發(fā)中會(huì)經(jīng)常用到,比如列表進(jìn)入詳情,本文主要介紹了Flutter?頁(yè)面跳轉(zhuǎn)和傳值的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
詳解Flutter自定義應(yīng)用程序內(nèi)鍵盤的實(shí)現(xiàn)方法
本文將展示如何利用Flutter創(chuàng)建自定義鍵盤小部件,用于在自己的應(yīng)用程序中的Flutter TextField中輸入文本,感興趣的小伙伴可以了解一下2022-06-06
Android Studio gradle配置packagingOptions打包so庫(kù)重復(fù)
這篇文章主要為大家介紹了Android Studio gradle配置packagingOptions打包so庫(kù)重復(fù)問題的解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android監(jiān)聽?wèi)?yīng)用前臺(tái)的實(shí)現(xiàn)方案
在 Android 應(yīng)用開發(fā)中,監(jiān)聽?wèi)?yīng)用前臺(tái)狀態(tài)是一項(xiàng)核心功能,對(duì)于優(yōu)化用戶體驗(yàn)、提升資源管理效率以及實(shí)現(xiàn)系統(tǒng)級(jí)功能具有重要意義,以下將從技術(shù)實(shí)現(xiàn)、業(yè)務(wù)場(chǎng)景和系統(tǒng)特性等多個(gè)維度,深入探討幾種主流的實(shí)現(xiàn)方案,需要的朋友可以參考下2025-02-02
android 使用uinput模擬輸入設(shè)備的方法
這篇文章主要介紹了android 使用uinput模擬輸入設(shè)備的方法,有需要的朋友可以參考一下2014-01-01

