首页 > 解决方案 > 在 NativeScript 上为 Android 设置安全插入

问题描述

对于 iOS,我app.ios.window.safeAreaInsets用来发现 NativeScript 中的安全插图。

同样,我想发现适用于 Android 手机的安全插页,这样我就可以正确处理具有软导航的 Android 设备或具有缺口的较新 Android 手机(例如 OnePlus 6)。

我在tns-platform-declarationsSDK 级别 20+ 中看到有一个类android.view.WindowInsets,它具有类似getSystemWindowInsetTop()and的方法getSystemWindowInsetBottom(),这似乎正是我所需要的。

然而,我正在努力调用这些方法,并且想知道是否有人可以就如何继续进行建议。

到目前为止,我发现它decorView有一个方法onApplyWindowInsets(),但据我所知,我已经需要传递一个实例,android.view.WindowInsets据我所知,这是我所追求的。

这是我到目前为止所拥有的:

if (app.android && device.sdkVersion >= '20') {
  const window = app.android.startActivity.getWindow();
  const decorView = window.getDecorView();

  //decorView.onApplyWindowInsets();
}

感谢您的任何指点!

标签: androidnativescript

解决方案


这个片段对我有用,至少用于检测带有缺口的状态栏的更大高度。

let androidStatusBarHeight = 0;

const context = application.android.context;
const metrics = new android.util.DisplayMetrics();
context.getSystemService(android.content.Context.WINDOW_SERVICE).getDefaultDisplay().getRealMetrics(metrics);
console.log(metrics.density);
const resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if(resourceId > 0) {
  console.log(context.getResources().getDimensionPixelSize(resourceId));
  androidStatusBarHeight = context.getResources().getDimensionPixelSize(resourceId) / metrics.density;
} else {
  androidStatusBarHeight = 24;
}
return androidStatusBarHeight;

推荐阅读