获取系统插入的正确方法

2024-02-20

我一直在使用view.rootWindowInsets.stableInsetTop和 Bottom 来获取状态栏和导航栏的高度,但是现在已弃用,并且文档建议使用 https://developer.android.com/reference/android/view/WindowInsets#getMandatorySystemGestureInsets() 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() 在 API 29 中被列入灰名单,在 API 30 中被列入黑名单 https://developer.android.com/about/versions/11/non-sdk-11。 (尽管运行 API 29,设备仍然抛出异常)

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

我可以用view.rootWindowInsets.stableInsetTop如上所述,但我更喜欢使用未弃用的 API。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取系统插入的正确方法 的相关文章

随机推荐