有一个全屏活动,以下代码块用于实现相同目的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
// ….
}
@Override
protected void onResume() {
Log.i(TAG, "onResume");
super.onResume();
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
但是,当显示自定义对话框时,或者如果编辑文本获得焦点,则底部导航栏将变为可见并四处停留。官方文件说:
如果新活动或对话框出现在前景中,请进行对焦并部分涵盖进行中的活动失去焦点并进入暂停状态。然后,系统调用onPause()上。
[当所涵盖的活动返回到前台并重新获得焦点时,它调用onResume()。
但是对话框失去焦点时将不调用onResume()
(已通过日志检查)。
还尝试在自定义对话框的onCreate()中添加以下代码:
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
添加上述代码后,当自定义对话框位于前景中时,导航栏将隐藏,但是当焦点超出焦点时,导航栏会弹出回到屏幕上。
[还尝试使用样式设置全屏模式。请在下面同样参考。
<style name="FullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowContentTransitions">true</item>
</style>
[edittext也是如此。活动将以全屏模式启动,但是一旦edittext获得焦点,底部导航栏就会显示出来并停留在周围。
任何输入将不胜感激。
干杯!
尝试此代码。
fun View.setImmersiveMode() {
isFocusableInTouchMode = false
setOnClickListener {
requestFocusFromTouch()
}
}
editText.setImmersiveMode()