1. 程式人生 > >關於處理底部虛擬按鍵的坑

關於處理底部虛擬按鍵的坑

做專案的時候遇到佈局被虛擬按鍵遮住

我採用了在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"
//今天遇到類似問題,已解決。