DisplayCutout позиция - PullRequest
       4

DisplayCutout позиция

0 голосов
/ 05 марта 2020

Я пытаюсь определить положение 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), 442px слева.
0 - Где начнется вырез (по оси Y), 0px сверху.
998 - Где заканчивается вырез (по оси X), 998px слева.
171 - Где вырез заканчивается (на оси Y), 171px от вершины.


Мой вопрос: Поскольку API DisplayCutout не возвращает позиции / координаты отдельно, wh at - лучший способ получить позиции / координаты из String<Rect>?

Единственный способ, о котором я могу подумать, - это использовать String's substring, но это выглядит как "hacki sh" / неправильный.

1 Ответ

0 голосов
/ 05 марта 2020

Я обнаружил, что могу сделать следующее:

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, конечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...