我一直在使用view.rootWindowInsets.stableInsetTop
and bottom 来获取状态和导航栏的高度,但是现在已弃用,文档建议使用
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 中被列入黑名单。(尽管运行 API 29,设备仍然抛出)
那么我应该使用什么来获取适用于 API 级别 24 及更高级别的信息?
我可以view.rootWindowInsets.stableInsetTop
像上面那样使用,但我更喜欢使用未弃用的 API。