文章目录
  1. 1. 4.0可使用的方法
  2. 2. 4.1以后
  3. 3. 示例

在亘古时代(Android 2.+)的时候,全屏操作简单粗暴,但是切换显示、隐藏时丑陋之极。

  • 在theme中设置
1
2
3
4
<application
android:theme="@android:style/Theme.Holo.NaoActionBar.Fullscreen"
...
</application>
  • 在activity渲染之前
1
2
3
4
5
6
7
8
9
10
11
...
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
setContentView(...);
...
}
...

因为设置了WindowManager的flag,想要切换只能重置flag,而且因为大小变了,activity的界面也会改变。

在改革春风吹满地的新时代(Android 4.0+),SDK提供了我们新的选择,使用setSystemUiVisibility()来操控SystemUI,这里不只StatusBar还有NavigationBar

4.0可使用的方法

1
2
3
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibilit(uiOptions);
  • 触摸屏幕任何位置都会使得导航、状态栏出现,且SYSTEM_UI_FLAG_HIDE_NAVIGATION被清除
  • 一旦标志位被清除,需要重新设置
  • 在不用地方UI FLAG是不同的,所有最好在onReasume()和onWindowFocusChaned()中设置
  • 被调用的View显示时才会生效

4.1以后

上面的方法设置后,内容还是会因为场景的变化而变化,所以我们需要让我们的内容放在SystemUI的后面

1
2
3
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
decorView.setSystemUiVisibilit(uiOptions);

值得注意的是,有些控件我们是不希望不覆盖住的,比如toolbar,这个时候需要给它加上FitsSystemWindows属性,保证不会被SystemUI遮住。
从示例上看,系统会为View设置上Padding,所以,如果要做切换时,可能要考虑还原View的Padding。

示例

https://github.com/SeniorZhai/SystemUI

文章目录
  1. 1. 4.0可使用的方法
  2. 2. 4.1以后
  3. 3. 示例