Принципы навигации

На удобство использования также влияет навигация между экранами и приложениями. Принципы, описанные ниже, помогут вам сделать приложение удобным и понятным для пользователей. Компонент Navigation разработан так, чтобы по умолчанию реализовывать эти принципы. Это позволяет пользователям применять одни и те же эвристики и шаблоны навигации при переходе между приложениями.

Фиксированный пункт отправления

У каждого приложения есть фиксированный начальный пункт назначения. Это первый экран, который пользователь видит при запуске приложения. Это также последний экран, который пользователь видит, когда возвращается в панель запуска после нажатия кнопки "Назад". Рассмотрим пример с приложением Sunflower.

Рисунок 1. Экран со списком – это начальный пункт назначения в приложении Sunflower.

При запуске приложения Sunflower из панели запуска первым экраном, который видит пользователь, является Экран списка, список растений в его саду. Это также последний экран, который они видят перед выходом из приложения. Если они нажмут кнопку «Назад» на экране списка, они вернутся к панели запуска.

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

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

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

Кнопки "Вверх" и "Назад" выполняют одинаковые действия в рамках задачи приложения.

Рисунок 2. Кнопки "Вверх" и "Назад"

Кнопка "Назад" находится на панели навигации внизу экрана и позволяет перемещаться по экранам, с которыми пользователь работал недавно, в обратном хронологическом порядке. Когда вы нажимаете кнопку "Назад", текущий пункт назначения извлекается из верхней части обратного стека, и вы переходите к предыдущему пункту назначения.

Кнопка "Вверх" находится на панели приложения в верхней части экрана. В рамках задачи приложения кнопки "Вверх" и "Назад" работают одинаково.

Кнопка "Вверх" никогда не закрывает приложение.

Если пользователь находится на начальном экране приложения, кнопка "Вверх" не отображается, поскольку она не позволяет выйти из приложения. Однако кнопка "Назад" отображается и позволяет выйти из приложения.

Если ваше приложение запущено с помощью ссылки на контент в задаче другого приложения, кнопка "Вверх" возвращает пользователей к задаче вашего приложения и проводит их через имитированный обратный стек, а не к приложению, которое активировало ссылку на контент. Однако кнопка "Назад" возвращает вас в другое приложение.

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

При переходе по ссылке на контент в приложении существующий обратный стек удаляется и заменяется новым.

Вернемся к примеру с приложением Sunflower. Предположим, что пользователь ранее запустил приложение с главного экрана и перешел на экран с подробной информацией о яблоке. На экране "Недавние" будет показано, что существует задача, в которой верхним экраном является экран с подробными сведениями о яблоке.

Рисунок 3. Навигация пользователя по приложению Sunflower и результирующий обратный стек.

В этот момент пользователь может нажать кнопку главного экрана, чтобы перевести приложение в фоновый режим. Допустим, в приложении есть функция ссылки на контент, которая позволяет пользователям сразу переходить к экрану с подробной информацией о конкретном растении по его названию. При открытии приложения по этой ссылке на контент текущий обратный стек Sunflower, показанный на рисунке 3, полностью заменяется новым обратным стеком, как показано на рисунке 4:

Рисунок 4. Переход по ссылке на контент заменяет существующий обратный стек для приложения Sunflower.

Обратите внимание, что обратный стек Sunflower заменяется синтетическим обратным стеком с экраном сведений об авокадо вверху. Экран My Garden, который является начальным пунктом назначения, также был добавлен в обратный стек. Исходный обратный стек Sunflower удален, и приложение больше не знает, что пользователь был на экране сведений о яблоке. Все это важно, потому что синтетический обратный стек должен быть реалистичным. Он должен соответствовать обратному стеку, который мог быть получен при обычной навигации по приложению.

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

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