Прозрачная панель навигации не прозрачна в режиме разделенного экрана - PullRequest
0 голосов
/ 06 февраля 2019

Приложение, над которым я работаю, использует прозрачные системные панели в версиях Android, которые его поддерживают.Это достигается с помощью следующего определения в стиле:

<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>

<item name="android:windowDrawsSystemBarBackgrounds">true</item>

и следующего кода:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    /* Make system bars fully transparent */
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}

В обычном режиме это работает, как и ожидалось: и статус, и панель навигации отображаютсяналожение на содержимое приложения.

В режиме разделенного экрана это работает для строки состояния, но не для панели навигации: в портретном режиме, когда приложение находится внизу, панель навигации черная, но getWindow().getDecorView().getRootWindowInsets().getSystemWindowInsetBottom() сообщает о вставке 144 пикселей.Высота вида декора на 144 пикселя меньше, чем у корневого вида (без разделенного экрана они оба равны, поскольку в приложении нет панели действий).Аналогичные симптомы в ландшафтном режиме, когда приложение находится справа (как панель навигации).

Добавление флага View.SYSTEM_UI_FLAG_LAYOUT_STABLE не оказывает никакого влияния.

Устройство представляет собой смартфон, т.е.устройство, которое по умолчанию установлено в книжный режим и показывает боковую панель навигации в режиме альбомной ориентации.

Это ошибка в используемом мной дистрибутиве Android (LineageOS 15.1, Android 8.1.0) или я отсутствуетчто-то?Должна ли панель навигации быть прозрачной в режиме разделенного экрана?Если нет, как я могу надежно определить, какие части моего обзора будут скрыты системными панелями?

1 Ответ

0 голосов
/ 08 февраля 2019

Поскольку у меня до сих пор нет объяснения сообщаемым значениям, я предполагаю, что это ошибка, присутствующая во многих (если не во всех) версиях Android.

Кроме того, очевидно, что предпочтительным способом получения оконных вставок являетсяпереопределить onApplyWindowsInsets() и оценить переданный аргумент insets (который поддерживается с API 20, тогда как для вышеуказанного способа требуется API 23).К сожалению, похоже, что имеет несколько собственных ошибок , а именно сообщает о неверных верхних вставках, но объединение двух результатов мне помогло.

  • Сохранение вставленных в * 1010 вкладок*, отбрасывая только верхнюю.
  • Используйте сохраненные значения и полагайтесь на View#getRootWindowInsets(), чтобы получить верхнюю вставку.

Объединенные значения сработали для меня.

...