首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WindowInsetsController#hide(statusBars())导致内容跳转

WindowInsetsController#hide(statusBars())导致内容跳转
EN

Stack Overflow用户
提问于 2021-08-25 16:08:24
回答 1查看 262关注 0票数 1

在我的活动调用时

代码语言:javascript
复制
requestWindowFeature(Window.FEATURE_NO_TITLE)
window.setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN)

在其onCreate方法内部,以便隐藏状态栏并以全屏模式显示。

作为迁移到Android30的一部分,正如文档所建议的那样,我用WindowInsetsController#hide(statusBars())替换了window.setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN)。然而,这两种方法的行为是不同的。不推荐使用的版本平滑地隐藏了状态栏,而现代版本则在隐藏状态栏时使活动的内容“跳转”。

有没有人观察到了同样的行为并找到了解决方法?

EN

回答 1

Stack Overflow用户

发布于 2021-08-27 11:39:24

我不确定它是否适合您的特定目的,因为我必须重新编写代码以获得满意的解决方案,但我设法在活动中用以下代码消除了“跳转”(我使用Compat类来避免编写多个实现,但原始类的工作方式相同):

代码语言:javascript
复制
@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至今仍在使用过时的代码,我在下面将其标记为“不可用文档”,希望它能更快地更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68926378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档