0

我正在尝试确定DisplayCutout(缺口)的位置。

Android 开发者博客,声明如下:

在 Android P 中,我们添加了 API,让您可以管理应用程序如何使用显示剪切区域,以及检查剪切是否存在并获取它们的位置。


所以我尝试获取切口的位置,这是我能够得到它的唯一方法:

if (SDK_INT >= Build.VERSION_CODES.P) {
    DisplayCutout displayCutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();
    if (displayCutout != null) {
        List<Rect> bounding = displayCutout.getBoundingRects();
        for (int i=0; i<bounding.size(); i++) {
            Log.e("BoundingRect - ", ""+bounding.get(i));
        }                    
    }
}

在 Google Pixel 3XL 上运行上述程序时,它会返回Rect(442, 0 - 998, 171).

根据我所做的测试,这与:

442- 切口开始的位置(在 x 轴上),距左侧 442 像素。
0- 切口开始的位置(在 y 轴上),距顶部 0px。
998- 切口结束的位置(在 x 轴上),距左侧 998 像素。
171- 切口结束的地方(在 y 轴上),距离顶部 171 像素。


我的问题:由于DisplayCutoutAPI 不单独返回位置/坐标,从 ? 获取位置/坐标的最佳方法是String<Rect>什么?

我能想到的唯一方法是使用 String's substring,但这感觉“hackish”/不正确。

4

1 回答 1

0

我发现我可以做到以下几点:

if (SDK_INT >= Build.VERSION_CODES.P) {
    DisplayCutout displayCutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();
    if (displayCutout != null) {
        List<Rect> bounding = displayCutout.getBoundingRects();
        for (int i=0; i<bounding.size(); i++) {
            int left = bounding.get(i).left;
            int right = bounding.get(i).right;
            int top = bounding.get(i).top;
            int bottom = bounding.get(i).bottom;
            Log.e("BoundingLeft - ", ""+left);
            Log.e("BoundingRight - ", ""+right);
            Log.e("BoundingTop - ", ""+top);
            Log.e("BoundingBottom - ", ""+bottom);
        }                    
    }
}

因此,如果我使用与我的问题相同的示例Rect(442, 0 - 998, 171),那么上面将返回:

E/BoundingLeft -: 442
E/BoundingRight -: 998
E/BoundingTop -: 0
E/BoundingBottom -: 171

现在我可以准确地确定它在哪里,当然DisplayCutout是在转换px为之后dp

于 2020-03-05T09:56:53.117 回答