1、網(wǎng)絡(luò)上關(guān)于隱藏StatusBar的方案很多,這里不再贅述,提供一個常見方式在activity下:
// 隱藏狀態(tài)欄
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
2虐秦、一些手機(jī)比如華為的機(jī)子,大多都有虛擬按鍵即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á)到效果,但是很坑的是當(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占滿整個手機(jī)屏幕帅霜,不留任何邊界(border)
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.y = 0;
params.x = 0;
windowManager.addView(view, params);
view.setSystemUiVisibility(flags);
}