Добрый день, коллеги! Желаю вам хорошего и продуктивного четверга. Сегодня на обсуждение предлагаю вынести следующую тему: edge-to-edge в Android приложениях
Точнее поделюсь своей болью по этому поводу и разберем возможные причины, почему edge-to-edge почти нигде нет(
Edge-to-edge (e2e) - это концепция, когда интерфейс приложения отображается и под системным UI тоже. В частности я говорю про статус бар (сверху) и навигейшн бар с кнопочками (снизу в портретной ориентации и сбоку при альбомной)
Окей, поняли. Только теперь возникает вопрос:
Для красоты. А вы чего ожидали? Согласитесь, приятно пользоваться красивым приложением, а эта ваша красота состоит из множества мелочей.
Помню только 4 приложения (помимо системных типа будильника или Play Store), у которых реализована edge-to-edge концепция и которыми я пользовался - Spark, Google Tasks, Inware и Slack (не на всех экранах правда 🤔). В целом эти приложения сами по себе красивые
Для меня, если честно, загадка почему в iOS с этим нет никаких проблем, а в Android есть, хотя и там и там надо обрабатывать этот момент. В iOS это вроде зовётся safe area и superview, но iOS разработчики, которые вдруг решили почитать этот тред, меня если что исправят
Для Android решение по обработке системного UI над приложением называется WindowInsets API. Системным UI является всё не от приложения и что отображается поверх него: систем бары, клавиатура, live captions и тд
Давайте разберем причины почему же на Android никто не использует WindowInsets для e2e?
Смею предположить, что одна из причин - это всё еще новая практика. Всю жизнь жили нормально с черным системным навбаром и статус баром, а теперь чето резко их надо делать прозрачными и отображать под ними приложение.
Это всё таки занимает какое-то время для проекта. В большинстве кейсов несущественное, но бывают и необычные ситуации. Например, кейс, где нужно скрывать навбар при открытии клавиатуры. И чтобы анимация осталась, и ничего не сломалось
Вторая возможная причина - да никто вообще не знает, что в Android так можно. Сейчас объясню.
Каким телефоном пользуется ваш дизайнер в команде? 99.9% - это iPhone. Он знает все привычные подходы в iOS, потому что как минимум, он ежедневный пользователь iOS. И скорее всего о новинках в гайдлайнах Android он скорее всего так глубоко не интересовался
И нет, я не осуждаю дизайнеров за использование iOS, это великолепная юзер-френдли ОС со своими подходами и это их право ею пользоваться
Выход из этой ситуации достаточно простой, как мне кажется: объяснить дизайнерам, мол, у нас могут быть в навбаре и кнопки, и жесты, и обрабатывать мы их можем так-то и так-то
Нарисовать макеты с учетом верхних и нижних отступов для систем баров - это просто. Задачка посложнее: выделить на это время на проекте, точнее на возможные риски при реализации этой фичи
С другой стороны: на iOS же это время выделяется. Почему мы не можем выделить себе время?
Есть вариант конечно просто не говорить никому и просто добавить эту "фичу" самому. Вариант рабочий в общем и целом, но достаточно рисковый, если вдруг в будущем на решение какой-то проблемы с WindowInsets займет неоправданно много времени, я не знаю как вы будете оправдываться
"Ну я добавил фичу о которой никто не просил потому что мне не нравится черный навбар внизу хаха пук и теперь я потратил 20 часов в рамках одной задачи на это"
Максимально утрировано, но вы меня поняли)
Ну и третья возможная проблема, самая интересная. Всем просто плевать. Приложение работает? Работает. Всё. 99% пользователей Android скорее всего и не обращают на это внимание на уродскую черную полосу внизу экрана, потому что просто привыкли
Но это не значит, что давайте забьём на e2e. Кто-то может сказать "Да андроид и не должен быть красивым, это же андроид" и будет совершенно не прав
Дизайн Android, особенно в последних версиях, стал действительно красивым, телефоном пользоваться кайф да и только. Есть одно исключение: противные китайские прошивки (это имхо. есть люди, которым они нравятся 🧐)
И например, лично меня (надеюсь не только меня), очень раздражает черная полоса внизу. В некоторых приложениях в 2022 году еще даже статус бар черный сверху 🤢 (привет Deezer)
И выглядит это очень колхозно, хотя сам дизайн приложения красивый
Вообще WindowInsets это супермощная штука не только для решения задачи с edge-to-edge. Можно еще клавиатуру красиво анимировать (как на скринкасте выше), чтобы она выдвигалась медленно, а не просто спавнилась посреди экрана
Можно переопределять области по бокам экрана, отвечающие за бэксвайп (искренне не знаю зачем, но если вы хотите - флаг вам в руки)
В общем, если какая-то проблема с системным UI - вам на помощь WindowInsets 😎
Как итог: я яро за использование edge-to-edge (как вы уже могли заметить), как минимум только потому что я люблю красивые приложения и люблю подмечать в приложениях всякие красивые мелочи (иконки, анимашки, ОТСУТСТВИЕ ЧЕРНЫХ ПОЛОС)
Тимур Задворнов