關於處理底部虛擬按鍵的坑
阿新 • • 發佈:2019-01-22
做專案的時候遇到佈局被虛擬按鍵遮住
我採用了在onCreate裡新增
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
來隱藏掉虛擬按鍵,解決這個問題,之後很長一段時間看似好用
後來某一天發現進入到這個頁面後,第一次點選或者滑動,根本沒反應,點一次之後再點,就好了,為了解決這個問題,我幾乎是一行一行程式碼排查,終於發現是這行程式碼的鍋。
這行程式碼的確能夠隱藏虛擬按鍵,但是一旦你點選螢幕,導航欄會出現(持續1秒左右),並且消費掉你的點選事件。如果你要點選一個按鈕(導航欄隱藏狀態下),你需要連續點兩次。因為1秒鐘之後,導航欄又消失了,點選螢幕事件會被再次攔截消費。
如果你想隱藏虛擬按鍵,請用下列程式碼,不過這個方法直接在onCreate裡用似乎效果不是很好,我寫在onResume裡
/** * 隱藏虛擬按鍵,並且全屏 */ protected void hideBottomUIMenu() { //隱藏虛擬按鍵,並且全屏 if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api View v = this.getWindow().getDecorView(); v.setSystemUiVisibility(View.GONE); } else if (Build.VERSION.SDK_INT >= 19) { //for new api versions. View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); } }
如果不想隱藏虛擬按鍵,僅僅想要適配它,請用下列程式碼
//狀態列 @ 頂部
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//A
//導航欄 @ 底部
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//B
//這個加在哪個佈局,該佈局就會相應的向上(配置A)或者向下(配置B)或者向上下(同時配置AB)擴充套件
android:fitsSystemWindows="true"
//今天遇到類似問題,已解決。