获取系统插图的正确方法

问题描述

我一直在使用 view.rootwindowInsets.stableInsetTop底部获取状态栏和导航栏的高度,但是现在已弃用,docs advise to use rootwindowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).top

所以我现在有下面的代码

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
        view.rootwindowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).top
    else
        @Suppress("DEPRECATION")
        view.rootwindowInsets.stableInsetTop

这适用于 API 24 和 API 30 模拟器,但是在运行 API 29 (Andorid 10) 的 galaxy S20 FE 上这不起作用。

我收到以下错误

Accessing hidden method Landroid/view/WindowInsets$Type;->systemBars()I (blacklist,linking,denied)
2021-01-17 01:45:18.348 23013-23013/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: app.test.debug,PID: 23013
    java.lang.NoSuchMethodError: No static method systemBars()I in class Landroid/view/WindowInsets$Type; or its super classes (declaration of 'android.view.WindowInsets$Type' appears in /system/framework/framework.jar!classes3.dex)

显然 systemBars() was graylisted in API 29 and is blacklisted in API 30。 (尽管运行 API 29,设备仍然抛出)

那么我应该使用什么来获取适用于 API 级别 24 及更高级别的信息?

我可以像上面一样使用 view.rootwindowInsets.stableInsetTop,但我更喜欢使用未弃用的 API。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...