在我的活动调用时
requestWindowFeature(Window.FEATURE_NO_TITLE)
window.setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN)在其onCreate方法内部,以便隐藏状态栏并以全屏模式显示。
作为迁移到Android30的一部分,正如文档所建议的那样,我用WindowInsetsController#hide(statusBars())替换了window.setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN)。然而,这两种方法的行为是不同的。不推荐使用的版本平滑地隐藏了状态栏,而现代版本则在隐藏状态栏时使活动的内容“跳转”。
有没有人观察到了同样的行为并找到了解决方法?
发布于 2021-08-27 11:39:24
我不确定它是否适合您的特定目的,因为我必须重新编写代码以获得满意的解决方案,但我设法在活动中用以下代码消除了“跳转”(我使用Compat类来避免编写多个实现,但原始类的工作方式相同):
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
hideSystemUI();
}
}
private void hideSystemUI() {
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
WindowInsetsControllerCompat insetsController = WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
if (insetsController != null) {
insetsController.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
insetsController.hide(WindowInsetsCompat.Type.statusBars());
insetsController.hide(WindowInsetsCompat.Type.navigationBars());
}
}我之前有一个切换解决方案,在触摸屏上显示系统和导航栏(非常类似于the now deprecated documentation,但我无法让它不跳转就能工作。
让我与众不同的是使用了WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE。有关此选项的文档说明如下:
这些短暂的系统条将覆盖应用程序的内容,可能具有一定程度的透明度,并将在短暂的超时后自动隐藏。
顺便说一句,由于the official documentation至今仍在使用过时的代码,我在下面将其标记为“不可用文档”,希望它能更快地更新。
https://stackoverflow.com/questions/68926378
复制相似问题