1.在xml文件中进行配置
清单文件AndroidManifest.xml中,需要全屏或设置成无标题栏的Activity
实现全屏效果:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
实现无标题栏(但有系统自带的任务栏):
android:theme="@android:style/Theme.NoTitleBar"
2.编写代码设置
4.0之前
在onCreate()方法中加入如下代码
实现全屏效果:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
实现无标题栏(但有系统自带的任务栏)在setContentView之前:
requestWindowFeature(Window.FEATURE_NO_TITLE);
注意:
setFlags在 4.0 以及之前设置全屏,这种全屏方式是无法隐藏 NavigationBar 的
(如果有 NavigationBar 的话),因为 NavigationBar 是在 4.0 以后才引入的。
4.1 以及之后
使用 View 的 setSystemUiVisibility() (对窗口的View都适用)来对 SystemBar 进行控制
注意:设置多个标志位时要用 | 连接起来,不能多次调用 setSystemUiVisibility,多次调用只有最后一次设置的 flag 生效,如果想清除之前设置的所有 flag,mDecorView.setSystemUiVisibility(0) 就可以了。
控制 SystemBar 相关:
1. FULLSCREEN
1. HIDE_NAVIGATION
1. LOW_PROFILE
布局相关:
1. LAYOUT_SCREEN
1. LAYOUT_HIDE_NAVIGATION
1. LAYOUT_STABLE
沉浸式相关 (4.4 引入):
1. IMMERSIVE
1. IMMERSIVE_STICKY
设置监听
当 SystemBar 的显示状态发生变化时,onSystemUiVisibilityChange()方法就会被调用。但是有一个例外,设置 IMMERSIVE_STICKY 后将SystemBar 呼出并不会触发该监听器。onSystemUiVisibilityChange(int visibility) 方法中的 visibility 参数表示的是 LOW_PROFILEFULLSCREEN 跟 HIDE_NAVIGATION 这三个 flag 的值的和。
- FULLSCREEN(4)
- HIDE_NAVIGATION(2)
- LOW_PROFILE(1)
mDecorView.setOnSystemUiVisibilityChangeListener(
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == 0) {
// SystemBar 处于显示状态
Toast.makeText(SystemBarTestActivity.this, "显示状态", Toast.LENGTH_SHORT).show();
} else {
// SystemBar 处于隐藏状态
Toast.makeText(SystemBarTestActivity.this, "显示状态", Toast.LENGTH_SHORT).show();
}
}
});