【Android】隱藏狀態欄StatusBar和導航欄NavigationBar

1、網絡上關於隱藏StatusBar的方案很多,這裏不再贅述,提供一個常見方式在activity下:
// 隱藏狀態欄

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

 WindowManager.LayoutParams.FLAG_FULLSCREEN);

2、一些手機比如華爲的機子,大多都有虛擬按鍵即navigationbar,關於隱藏NavigationBar,網絡上大多數的做法是設置一個flag,如下:

View decorView = getWindow().getDecorView();

decorView .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);

*這是最簡單的隱藏方式,大多數應用中能夠達到效果,但是很坑的是當你從邊緣上滑的時候,導航欄就出來了,google明確說明這個動作是不能攔截的。
3、所以很多人想能不能在上面蓋一層view,把事件攔截了,不讓導航欄彈出來,不過由於view的級別不夠,導航欄還是不緊不慢的彈出,後來偶然發現了系統錯誤彈窗能位於Window的最上方覆蓋一切,且不會攔截觸摸或點擊事件,於是給view設置了這個flag,覆蓋上這個view之後把導航欄隱藏,試了試下面的代碼搞定了:
*

private void hideNavigationBar() {

 int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION//隱藏Navigation Bar

 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;//防止Navigation Bar在覆蓋view的情況下上彈

 LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 View view = inflater.inflate(R.layout.my_view, null);

 view.setOnTouchListener(new View.OnTouchListener() {

 @Override

 public boolean onTouch(View v, MotionEvent event) {

 Log.e("rocky", "Hi....");

 return false;

 }

 });

 WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);

 int width = windowManager.getDefaultDisplay().getWidth();

 int height = windowManager.getDefaultDisplay().getHeight();

 WindowManager.LayoutParams params = new WindowManager.LayoutParams(width, height,

 WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,

 WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //讓window佔滿整個手機屏幕,不留任何邊界(border)

 PixelFormat.TRANSLUCENT);

 params.gravity = Gravity.TOP | Gravity.LEFT;

 params.y = 0;

 params.x = 0;

 windowManager.addView(view, params);

 view.setSystemUiVisibility(flags);

 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章