问题描述
我必须继承一个自定义的主活动类,它是一个第三方库,并且不能对该类进行任何更改。此类将FLAG_LAYOUT_IN_SCREEN添加到窗口中,并导致应用全屏显示。但是,我想防止这种行为。因此,问题是如何清除/禁用全屏模式并显示导航栏/状态栏?
这是自定义主要活动类
public class CustomActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getwindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
setContentView(new FrameLayout(this));
// rest...
}
}
这是我的活动课:
public class MyActivity extends CustomActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// tried these attempts below,but none of them prevented
// the fullscreen mode which hides navigation bar and status bar.
this.getwindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
this.getwindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
this.getwindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
注意:您还可以轻松地在示例应用程序上对其进行测试。添加FLAG_LAYOUT_IN_SCREEN
后,您会注意到,全屏模式仍然适用于不同的尝试。
public class MainActivity extends Activity {
private FrameLayout mainLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getwindow().addFlags(FLAG_LAYOUT_IN_SCREEN);
setContentView(new FrameLayout(this));
this.getwindow().clearFlags(FLAG_LAYOUT_IN_SCREEN);
this.getwindow().addFlags(FLAG_KEEP_SCREEN_ON);
}
解决方法
请将以下内容应用于全屏(显示状态栏)
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);