Android開發(fā)小技巧——隱藏導(dǎo)航欄NavigationBar和狀態(tài)欄StatusBar

1、網(wǎng)絡(luò)上關(guān)于隱藏StatusBar的方案很多,這里不再贅述,提供一個常見方式在activity下:
// 隱藏狀態(tài)欄

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

 WindowManager.LayoutParams.FLAG_FULLSCREEN);

2、一些手機比如華為的機子,大多都有虛擬按鍵即navigationbar,關(guān)于隱藏NavigationBar,網(wǎng)絡(luò)上大多數(shù)的做法是設(shè)置一個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);

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

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

 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容