Определите тип вырезанного дисплея Android 9.0 - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь идентифицировать тип выреза дисплея, выбранный программным способом в Android с ОС> = 9.0.

Я пробовал таким образом

DisplayCutout displayCutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();

Но вырез дисплея всегда возвращает ноль.

Тоже пробовал по-другому

 int mode = ((Activity) context).getWindow().getAttributes().layoutInDisplayCutoutMode;

Но это дает мне ценность поддержки моего приложения. Я настроен никогда в моем стиле.

Но я хочу знать, когда пользователь выбирает другой тип выреза из настроек разработчика из настроек.

Пожалуйста, дайте мне знать, если это может быть достигнуто!

1 Ответ

0 голосов
/ 15 мая 2019

После некоторых тестов работает только LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, после добавления OnApplyWindowInsetsListener

Я успешно получил DisplayCutout и Rects

@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
    DisplayCutout cut = insets.getDisplayCutout();
    if(cut != null) {
        int space = insets.getDisplayCutout().getBoundingRects().get(0).height();
        HCNXLog.e(TAG, "DisplayCutout.. " + space);
        RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) toolbar.getLayoutParams();
        lp.topMargin = space;
        toolbar.setLayoutParams(lp);
    }
    return insets;
}
...