summaryrefslogtreecommitdiffstats
path: root/docs/html-intl/intl/ru/design/patterns/navigation.jd
diff options
context:
space:
mode:
Diffstat (limited to 'docs/html-intl/intl/ru/design/patterns/navigation.jd')
-rw-r--r--docs/html-intl/intl/ru/design/patterns/navigation.jd213
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>Если предыдущий экран одновременно является иерархическим родителем текущего,
+кнопка "Назад" имеет то же действие, что и кнопка "Вверх"&mdash;, и это случается довольно
+часто. Однако, в отличие от кнопки "Вверх", гарантирующей, что пользователь остается в приложении, кнопка "Назад"
+может перевести его на главный экран или даже в другое приложение.</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>Однако существует важное исключение из этого правила во время просмотра подробных представлений элементов, не связанных
+вместе ссылающимся списком, например&mdash;, приложений
+одного разработчика или альбомов одного исполнителя в 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>Кнопка "Назад" действует не так, как в случае со стандартными (прямыми) уведомлениями. Нажав ее на промежуточном экране косвенного уведомления,
+пользователь вернется в точку, где было сгенерировано уведомление, &mdash;поскольку
+в стеке переходов назад не появились никакие дополнительные экраны. Если пользователь перейдет в приложение с
+промежуточного экрана, поведение кнопок "Вверх" и "Назад" будет таким же, как и при стандартных уведомлениях:
+навигация внутри приложения, а не возврат к промежуточному экрану.</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&mdash;, и никакая новая задача не создается. Если в фоновом режиме работает собственная задача 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>