Android 获取系统插入的正确方法

Android 获取系统插入的正确方法,android,windowinsets,Android,Windowinsets,我一直在使用view.rootWindowInsets.stableinsetop和bottom来获取状态栏和导航栏的高度,但是现在这种方法已被弃用,并且 rootWindowInsets.GetInsetSigningVisibility(WindowInsets.Type.systemBars()).top 所以我现在有下面的代码 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) view.rootWindow

我一直在使用
view.rootWindowInsets.stableinsetop
和bottom来获取状态栏和导航栏的高度,但是现在这种方法已被弃用,并且
rootWindowInsets.GetInsetSigningVisibility(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)
显然
systembar()
。(尽管运行API 29,设备仍会抛出)

那么,我应该使用什么来获取这些适用于API级别24及以上的信息呢


我可以像上面那样使用
view.rootWindowInsets.stableinsetop
,但我更喜欢使用一个未弃用的API。

我遇到了同样的问题,您找到了解决方案吗?很遗憾,没有<代码>视图。rootWindowInsets尽管已被弃用,但似乎工作正常。我注意到许多谷歌应用程序仍然只是改变系统栏的颜色,而不是边缘到边缘。Leland Richardson展示了如何使状态栏半透明,他说现在太复杂了,他决定从Stackoverflow中复制代码。另外,代码中充满了不推荐使用的API。(不过这是一个演示项目,不是一个生产应用程序。)