diff options
Diffstat (limited to 'docs/html-intl/intl/ru/design/patterns/navigation.jd')
-rw-r--r-- | docs/html-intl/intl/ru/design/patterns/navigation.jd | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/docs/html-intl/intl/ru/design/patterns/navigation.jd b/docs/html-intl/intl/ru/design/patterns/navigation.jd new file mode 100644 index 0000000..a65a8f6 --- /dev/null +++ b/docs/html-intl/intl/ru/design/patterns/navigation.jd @@ -0,0 +1,213 @@ +page.title=Навигация с помощью кнопок "Назад" и "Вверх" +page.tags="navigation","activity","task","up navigation","back navigation" +page.image=/design/media/navigation_between_siblings_gmail.png +@jd:body + +<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html"> + <div> + <h3>Документация для разработчиков</h3> + <p>Обеспечение эффективной навигации</p> + </div> +</a> + +<p itemprop="description">Внутренне непротиворечивая навигация является важнейшей составляющей пользовательского интерфейса. Мало что так раздражает +пользователей, как несогласованное или непредсказуемое поведение элементов навигации. В Android 3.0 +глобальное поведение навигации претерпело значительные изменения. Тщательное следование +инструкциям по применению кнопок "Назад" и "Вверх" сделает навигацию в вашем приложении предсказуемой и надежной с точки зрения пользователей.</p> +<p>В Android 2.3 и в более ранних версиях для навигации внутри приложения использовалась системная кнопка <em>Назад</em>. + С появлением панели действий в Android 3.0 стал доступен второй механизм +навигации, — кнопка <em>Вверх</em>, содержащая значок приложения и левую угловую скобку.</p> + +<img src="{@docRoot}design/media/navigation_with_back_and_up.png"> + +<h2 id="up-vs-back">Кнопки "Вверх" и "Назад"</h2> + +<p>Кнопка "Вверх" используется для навигации внутри приложения по иерархической структуре его +экранов. Например, если на экране A отображается некоторый список, и при выборе какого-либо элемента открывается +экран B (с подробной информацией об этом элементе), то на экране B должна присутствовать кнопка "Вверх" + для возврата к экрану A.</p> +<p>Если экран является самым верхним в приложении (то есть главным), он не должен содержать кнопку +"Вверх".</p> + +<p>Системная кнопка "Назад" используется для навигации в обратном хронологическом порядке среди +экранов, недавно открытых пользователем. Такая навигация основана на порядке появления +экранов, а не на иерархии приложения.</p> + +<p>Если предыдущий экран одновременно является иерархическим родителем текущего, +кнопка "Назад" имеет то же действие, что и кнопка "Вверх"—, и это случается довольно +часто. Однако, в отличие от кнопки "Вверх", гарантирующей, что пользователь остается в приложении, кнопка "Назад" +может перевести его на главный экран или даже в другое приложение.</p> + +<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png"> + +<p>Кроме того, кнопка "Назад" проявляет поведение, не связанное напрямую с навигацией между экранами. Она +</p> +<ul> +<li>закрывает перемещаемые окна (диалоговые, всплывающие);</li> +<li>закрывает контекстные панели действий и снимает выделение с выделенных элементов;</li> +<li>скрывает экранную клавиатуру (IME).</li> +</ul> +<h2 id="within-app">Навигация внутри приложения</h2> + +<h4>Переход на экраны с несколькими точками входа</h4> +<p>Некоторые экраны не имеют строгой позиции в иерархии приложения, и на них можно перейти +из нескольких точек. Например, на экран настроек можно попасть из любого другого экрана +приложения. В таком случае кнопка "Вверх" должна осуществлять возврат на вызвавший экран, т. е. вести себя +идентично кнопке "Назад".</p> +<h4>Изменение представления содержимого на экране</h4> +<p>Изменение параметров представления содержимого на экране не сказывается на поведении кнопок "Вверх" и "Назад", — экран остается +на прежнем месте в иерархии приложения, а история навигации не меняется.</p> +<p>Примерами изменения представления являются</p> +<ul> +<li>переключение представлений с помощью вкладок или жестов прокрутки вправо/влево;</li> +<li>переключение представлений с помощью раскрывающихся (или свернутых) вкладок;</li> +<li>фильтрация списка;</li> +<li>сортировка списка;</li> +<li>изменение характеристик отображения (например, масштаба).</li> +</ul> +<h4>Навигация между экранами одного уровня</h4> +<p>Когда приложение поддерживает навигацию от списка к подробному представлению одного из его элементов, нередко +имеет смысл поддержать навигацию от этого элемента к другому, идущему в списке до или +после него. Например, в Gmail можно провести пальцем влево или вправо по переписке, +чтобы просмотреть предыдущие или последующие входящие сообщения. Как и в случае изменения представления на экране, такая +навигация не меняет поведение кнопок "Вверх" и "Назад".</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png"> + +<p>Однако существует важное исключение из этого правила во время просмотра подробных представлений элементов, не связанных +вместе ссылающимся списком, например—, приложений +одного разработчика или альбомов одного исполнителя в Play Store. В этих случаях переход по каждой ссылке создает +историю навигации, что заставляет кнопку "Назад" перебирать все ранее просмотренные экраны. Кнопка "Вверх" должна по-прежнему +игнорировать эти связанные по смыслу экраны и осуществлять переход на последний просмотренный контейнерный экран.</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_market1.png"> + +<p>Разработчик может сделать поведение кнопки "Вверх" еще более интеллектуальным, исходя из своих знаний о структуре подробного +представления. Вернемся к примеру с просмотром Play Store. Представьте, что пользователь перешел от информации о +книге к информации о ее экранизации. Тогда кнопка "Вверх" могла бы переводить пользователя в контейнер +(Фильмы), в котором он еще не был.</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_market2.png"> + +<h2 id="into-your-app">Навигация внутрь приложения с помощью уведомлений и виджетов главного экрана</h2> + +<p>У разработчика также есть возможность использовать уведомления или виджеты главного экрана, чтобы помочь пользователю переходить к экранам, +расположенным глубоко в иерархической структуре приложения. Например, виджет Inbox приложения Gmail и уведомление о новом сообщении могут + перевести пользователя непосредственно к переписке, в обход экрана с входящими сообщениями.</p> + +<p>В обоих этих случаях реализуйте следующее поведение кнопки "Вверх":</p> + +<ul> +<li><em>Если целевой экран, как правило, достигается из одного конкретного экрана +приложения</em>, кнопка "Вверх" должна осуществлять переход на этот экран.</li> +<li><em>В противном случае</em> кнопка "Вверх" должна осуществлять переход на самый верхний (главный) экран приложения.</li> +</ul> + +<p>Что касается кнопки "Назад", необходимо обеспечить более предсказуемую навигацию, вставив в +в стек переходов назад полный путь навигации вверх к самому верхнему экрану приложения. Это позволит пользователям, +забывшим, как они вошли в приложение, перейти к его главному экрану перед выходом из +приложения.</p> + +<p>Например, виджет главного экрана Gmail имеет кнопку, переводящую пользователя прямо на экран +создания сообщений. Кнопки "Вверх" или "Назад" переведут пользователя с этого экрана на экран входящих писем, а оттуда +кнопка "Назад" переведет его на главную страницу.</p> + +<img src="{@docRoot}design/media/navigation_from_outside_back.png"> + +<h4>Косвенные уведомления</h4> + +<p>Когда приложению нужно вывести информацию сразу о нескольких событиях, оно может выдать +одно уведомление, направляющее пользователя на промежуточный экран. Этот экран содержит сводку +событий и предоставляет пользователю возможность перейти вглубь приложения. Такие уведомления +называются <em>косвенными</em>.</p> + +<p>Кнопка "Назад" действует не так, как в случае со стандартными (прямыми) уведомлениями. Нажав ее на промежуточном экране косвенного уведомления, +пользователь вернется в точку, где было сгенерировано уведомление, —поскольку +в стеке переходов назад не появились никакие дополнительные экраны. Если пользователь перейдет в приложение с +промежуточного экрана, поведение кнопок "Вверх" и "Назад" будет таким же, как и при стандартных уведомлениях: +навигация внутри приложения, а не возврат к промежуточному экрану.</p> + +<p>Например, предположим, что пользователь получил косвенное уведомление от приложения Calendar при открытом приложении Gmail. Если он коснется +этого уведомления, откроется промежуточный экран с напоминаниями о нескольких +событиях. Касание кнопки "Назад" на промежуточном экране возвратит пользователя в Gmail. Если пользователь коснется конкретного +события, он перейдет с промежуточного экрана в приложение Calendar к подробной информации о +событии. Оттуда кнопки "Вверх" и "Назад" переведут его на верхний уровень приложения Calendar.</p> + +<img src="{@docRoot}design/media/navigation_indirect_notification.png"> + +<h4>Всплывающие уведомления</h4> + +<p><em>Всплывающие уведомления</em> появляются непосредственно перед пользователем, +в обход панели уведомлений. Они используются редко и <strong>должны быть зарезервированы для ситуаций, в которых требуется немедленная +реакция пользователя, и прерывание его действий оправдано</strong>. Например, +приложение Talk с помощью таких уведомлений извещает пользователя о поступившем от друга приглашении присоединиться к видеочату, поскольку срок действия этого +приглашения истекает через несколько секунд.</p> + +<p>В отношении навигации всплывающие уведомления ведут себя во многом аналогично промежуточному экрану +косвенного уведомления. Кнопка "Назад" удаляет всплывающее уведомление. Если пользователь переходит +от всплывающего уведомления к уведомляющему приложению, кнопки "Вверх" и "Назад" действуют, как при стандартных уведомлениях, +выполняя навигацию внутри приложения.</p> + +<img src="{@docRoot}design/media/navigation_popup_notification.png"> + +<h2 id="between-apps">Навигация между приложениями</h2> + +<p>Одним из фундаментальных достоинств системы Android является способность приложений активировать друг +друга, что дает пользователю возможность переходить непосредственно из одного приложения в другое. Например, +приложение, которому нужно сделать снимок, может активировать приложение Camera, которое передаст фотографию +вызвавшему приложению. Это огромное преимущество, как для разработчика, имеющего возможность без проблем воспользоваться +кодом других приложений, так и для пользователя, получающего согласованный интерфейс для часто выполняемых +действий.</p> + +<p>Чтобы разобраться в навигации между приложениями, необходимо разобраться в поведении платформы Android, +которое обсуждается ниже.</p> + +<h4>Действия, задачи и намерения</h4> + +<p><strong>Действие</strong> в Android — это компонент приложения, определяющий экран с +информацией и все действия, которые при этом может выполнить пользователь. Приложение представляет собой набор +действий, состоящий как из действий, созданных разработчиком, так и из тех, которые выполняются с помощью других приложений.</p> + +<p><strong>Задача</strong> — последовательность действий, выполняемых пользователем для достижения цели. Отдельная +задача может использовать действия, заимствованные у одного или у нескольких +различных приложений.</p> + +<p><strong>Намерение</strong> — механизм, позволяющий приложению сигнализировать, что ему требуется помощь +другого приложения в выполнении некоторого действия. Действия, выполняемые приложением, могут указывать, на какие намерения +они готовы отвечать. Для осуществления достаточно распространенных намерений, например, "Поделиться", у пользователя может быть установлено несколько приложений, + способных выполнить соответствующий запрос.</p> + +<h4>Пример: навигация между приложениями для поддержки совместного использования ресурсов</h4> + +<p>Чтобы понять, как действия, задачи и намерения взаимодействуют друг с другом, разберемся, как одно приложение позволяет пользователям +поделиться содержимым с помощью другого приложения. Например, запуск приложения Play Store из главного экрана создает +новую задачу, Task A (см. рисунок ниже). Когда пользователь выполнит навигацию по Play Store и коснется интересующей его книги, +чтобы просмотреть информацию о ней, он останется в том же приложении, расширив его возможности с помощью добавленных действий. Запуск +действия "Поделиться" выводит перед пользователем диалоговое окно со списком действий (из разных приложений), +зарегистрированных для выполнения намерения "Поделиться".</p> + +<img src="{@docRoot}design/media/navigation_between_apps_inward.png"> + +<p>Если пользователь предпочтет поделиться информацией через Gmail, действие "Написать" приложения Gmail добавляется как продолжение задачи +Task A—, и никакая новая задача не создается. Если в фоновом режиме работает собственная задача Gmail, на нее это никак +не повлияет.</p> + +<p>Если во время действия "Составление сообщения" пользователь отправит сообщение или коснется кнопки "Назад", он вернется к + действию "Просмотр информации о книге". Продолжая нажимать на "Назад", пользователь будет совершать переходы назад в Play +Store, пока, наконец, не вернется на главный экран.</p> + +<img src="{@docRoot}design/media/navigation_between_apps_back.png"> + +<p>Однако, коснувшись кнопки "Вверх" во время действия "Составление сообщения", пользователь выскажет пожелание остаться в приложении +Gmail. Откроется экран действия "Переписка" приложения Gmail, и для него будет создано новая задача Task B. Новые задачи +всегда имеют корень на главном экране, поэтому касание кнопки "Назад" на экране переписки возвращает пользователя именно туда.</p> + +<img src="{@docRoot}design/media/navigation_between_apps_up.png"> + +<p>Задача Task A остается в фоновом режиме, и пользователь может вернуться к ней впоследствии (например, с помощью +экрана с последними приложениями). Если в фоновом режиме уже работает собственная задача Gmail, она будет замещена +задачей Task B. Произойдет отказ от предыдущего контекста ради новой цели пользователя.</p> + +<p>Если для обработки намерений ваше приложение зарегистрирует действие, расположенное в глубине своей иерархии, +следуйте инструкциям по реализации навигации с помощью кнопки "Вверх", изложенным в разделе <a href="#into-your-app">Навигация внутрь приложения с помощью виджетов и +уведомлений главного экрана</a>.</p> |