android適配pad和部分手機底部虛擬按鍵+沉浸式狀態欄


在使用沉浸式狀態欄設置界面全屏時發現pad和部分手機(華為和魅族系統自帶)屏幕底部會帶有虛擬按鍵,遮擋住界面本身的一部分。

為了設置隱藏,在網上找了一些方法,設置Activity主題再在布局加fitsSystemWindows,或者在AndroidManifest里設置主題樣式加android:windowDrawsSystemBarBackgrounds。這些設置是可以隱藏底部按鍵,但同時也使我之前設置的沉浸式狀態欄失效。

下面兩種會隱藏按鍵,如果需要可以直接設置在activity中。

第一種:始終隱藏,觸摸屏幕時也不出現——

        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_IMMERSIVE;
        getWindow().setAttributes(params);

第二種:隱藏了,但觸摸屏幕時出現——

        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
        getWindow().setAttributes(params);

 但問題是這些虛擬按鍵有時候其實是需要用到的,所以為了顯示沉浸狀態欄又保留原來的按鍵,最后使用了這種方法:

 1 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
 2     Window window = getWindow();
 3     window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
 4             | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
 5     window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
 6             | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
 7             | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
 8     window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
 9     window.setStatusBarColor(Color.TRANSPARENT);
10     window.setNavigationBarColor(Color.TRANSPARENT);
11 } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4到5.0
12     WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
13     localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
14 }

不過此時界面會向上偏移一個狀態欄的高度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM