Android setSystemUiVisibility 连续调用不起作用

Android setSystemUiVisibility consecutive calls don't work

在我的应用中,用户可以进入全屏模式。在该模式下,每当用户触摸屏幕时,它都会切换系统 ui 可见性。

如果 ui 被隐藏,则两次触摸发生在大约 1 秒内(在现实世界中是很长一段时间),ui 会正确显示,但导航栏是不再隐藏。尽管 view.setSystemUiVisibility() 被调用时使用了正确的标志来隐藏它。

有问题的视图是 activity.getWindow().getDecorView()

在第二次触摸正确隐藏系统之前等待 1.5 秒或更长时间 ui。

标志:

private static final int STATIC_LAYOUT_FLAGS =
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;

private static final int HIDDEN_FLAGS =
        STATIC_LAYOUT_FLAGS |
        View.SYSTEM_UI_FLAG_FULLSCREEN |
        View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

再次说明一下,这是预期的行为:

  1. 状态栏和导航栏一开始是隐藏的
  2. 屏幕触摸显示状态栏和导航栏
  3. 第二个屏幕触摸隐藏状态栏和导航栏

如果步骤 (2) 和 (3) 之间的时间少于大约 1 秒,则导航栏无法正确隐藏(但状态栏可以)。在这种情况下,标志 SYSTEM_UI_FLAG_HIDE_NAVIGATION 而不是 设置,尽管它是发送到 setSystemUiVisibility().

的参数的一部分

添加调试语句会导致足够的延迟,不良行为不会再出现。

为什么?我该如何解决这个问题?

我遇到了同样的问题: 并找到了根本原因。它可以防止应用程序在全屏模式下锁定设备。因此,每次用户点击屏幕时都会显示导航栏,系统会跳过您的 setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) 1000 毫秒。