我添加了标志SYSTEM_UI_FLAG_IMMERSIVE_STICKY,它确实起作用。 但是,当旋转设备时,除非我向下滑动然后再次向上滑动,状态栏将变为不透明。
我阅读了文档:
实现onWindowFocusChanged()。如果您获得窗口焦点,则可能 要重新隐藏系统栏。例如,如果失去窗口焦点 由于应用上方显示的对话框或弹出菜单,您可能会 想要取消您先前安排的所有未决“隐藏”操作 使用Handler.postDelayed()或类似的东西。
我猜想状态栏必须具有如上所述的“待处理”隐藏操作。 但是我已经在onWindowFocusChanged()中重新设置了所有标志
然后,我检查了文档中链接的三个示例项目。但是在示例中,它们并没有像我已经做的那样以不同的方式覆盖所述方法。
这是我的主要活动
public class MainActivity extends Activity {
private View decorView;
private AtomView atomView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getRealSize(size);
atomView = new AtomView(this, size);
decorView = getWindow().getDecorView();
resetDecorView();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setContentView(atomView);
}
@Override
protected void onPause(){
super.onPause();
atomView.pause();
}
@Override
protected void onResume(){
super.onResume();
resetDecorView();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setContentView(atomView);
atomView.resume();
}
@Override
public void onWindowFocusChanged(boolean hasFocus){
super.onWindowFocusChanged(hasFocus);
if(hasFocus) {
resetDecorView();
}
}
private void resetDecorView(){
decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| 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
);
}
}