Как реализовать вставки системных панелей с навигацией жестами от края до края?

Я пытаюсь добавить элементы от края до края для панели навигации с помощью жестов в приложение Tip Time от Google . Я добавил прозрачныйnavigationBarColorТег XML дляthemes.xmlа также следующий код дляonCreate()функцияMainActivity.kt:

Это было напрямую скопировано из документации. Android Studio говорит, что «не может найти параметр с таким именем» для каждого из трех полей. Я заметил, что изменение скобки сразу после<ViewGroup.MarginLayoutParams>в фигурные скобки исправляет ошибку компилятора. Может быть, документация просто неверна?

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

Как видите, весь вид немного смещается вверх, а «Стоимость обслуживания»TextViewчастично обрезан панелью приложений. Что мне нужно изменить, чтобы реализовать вставки системы/панели навигации для контента от края до края, чтобы пользовательский интерфейс выглядел красиво? Кроме того, в качестве побочного вопроса, как я могу изменить темно-синий цвет строки состояния системы, чтобы он соответствовал цвету панели приложения, чтобы они выглядели смешиваемыми?

1 ответ

Согласно документации для содержимого от края до края:

Рисуйте за строкой состояния, если это имеет смысл для вашего контента и макета, например, в случае полноразмерных изображений. Для этого используйте API-интерфейсы, такие как AppBarLayout, который определяет панель приложения, закрепленную в верхней части экрана.

Таким образом, при передаче оконных вставок (особенно верхней) вы не можете использовать значение по умолчанию, вместо этого вам нужно настроить его с помощьюAppBarLayoutиToolBar, и чтобы он действовал как , используйтеsetSupportActionBar(), иNoActionBarтема приложения; это было бы<style name="Theme.TipTime" parent="Theme.MaterialComponents.DayNight.NoActionBar">в общем репо.

весь вид немного смещается вверх, а текстовое поле «Стоимость обслуживания» частично обрезается панелью приложения.

Причина, по которой образец использует значение по умолчанию вместо пользовательского; когда дело доходит до обработки вставок верхнего окна, это не повлияет на значение по умолчанию; обратите внимание, что вы передаете корневой макет активности вsetOnApplyWindowInsetsListenerобратный вызов, и, поскольку он не является частью действия, он не будет затронут. Поэтому активность смещается вверх за, когда верхняя вставка удаляется. Итак, чтобы решить эту проблему, вам нужно либо полностью удалить значение по умолчаниюActionBarили вместо этого использовать пользовательскую панель инструментов.

Кроме того, в качестве побочного вопроса, как я могу изменить темно-синий цвет строки состояния системы, чтобы он соответствовал цвету панели приложения, чтобы они выглядели смешиваемыми?

Используйте прозрачный цвет строки состояния в теме приложения:

      <item name="android:statusBarColor" tools:targetApi="l">@android:color/transparent</item>
Другие вопросы по тегам