动态显示和隐藏状态栏和导航栏
方法一:在主题中添加一个属性
[java] view plain copy
- <item name="android:windowFullscreen">true</item>
方法二:在setcontentview之前设置flag
[java] view plain copy
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
方法三:在任何位置都可以添加和移除一个flag
[java] view plain copy
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //隐藏状态栏
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //显示状态栏
方法四:通过view设置setsystemUiVisibility,参数有一下几种,可单独设置也可多个设置
[java] view plain copy
- View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。
- View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。
- View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。
- View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。
[java] view plain copy
- // //布局填充状态栏,设置透明
- // if (Build.VERSION.SDK_INT >= 21) {
- // View decorView = getWindow().getDecorView();
- // int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- // | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
- // decorView.setSystemUiVisibility(option);
- // getWindow().setStatusBarColor(Color.TRANSPARENT);//透明状态栏
- // }
- // //隐藏状态栏和导航栏,但是一点击就显示出来了
- // if (Build.VERSION.SDK_INT >= 21) {
- // View decorView = getWindow().getDecorView();
- // int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- // | View.SYSTEM_UI_FLAG_FULLSCREEN;
- // decorView.setSystemUiVisibility(option);
- // }
- // //布局填充状态栏,导航栏,设置全部透明
- // if (Build.VERSION.SDK_INT >= 21) {
- // View decorView = getWindow().getDecorView();
- // int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- // | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- // | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
- // decorView.setSystemUiVisibility(option);
- // getWindow().setNavigationBarColor(Color.TRANSPARENT);
- // getWindow().setStatusBarColor(Color.TRANSPARENT);
- // }
- //全屏显示,拉出状态栏和导航栏后一会后消失。
- if (Build.VERSION.SDK_INT >= 21) {
- 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
- | View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
- }
应用场景:横竖屏切换的时候显示和隐藏状态栏
[java] view plain copy
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
- //竖屏
- // getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //显示状态栏
- View decorView = getWindow().getDecorView();
- decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);//全部显示出来。
- } else {
- //横屏
- // getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //隐藏状态栏
- 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
- | View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
- }
- }