Редактор навигации

В Android Studio есть графический интерфейс, с помощью которого можно создавать и редактировать граф навигации. Это редактор для базового файла ресурсов XML.

Обзор

После того как вы добавите в приложение XML-граф, Android Studio откроет его в редакторе навигации. В редакторе навигации можно визуально редактировать графы навигации или напрямую изменять XML-код.

Рисунок 1. Редактор навигации
  1. Панель "Целевые сервисы". На ней перечислены хост навигации и все целевые сервисы в редакторе графов.
  2. Редактор графов. Содержит визуальное представление графа навигации. Вы можете переключаться между режимом Дизайн и представлением XML в режиме Текст.
  3. Атрибуты. Показывает атрибуты выбранного элемента на навигационной схеме.

Нажмите на вкладку Текст, чтобы посмотреть соответствующий код XML. Он должен выглядеть примерно так:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/nav_graph">

</navigation>

Элемент <navigation> является корневым элементом графа навигации. По мере того как вы добавляете в граф целевые страницы и связывающие действия, здесь в качестве дочерних элементов появляются соответствующие элементы <destination> и <action>. Если у вас есть вложенные графики, они будут представлены в виде дочерних элементов <navigation>.

Как добавить целевые сервисы

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

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

  1. В редакторе навигации нажмите на значок Новый пункт назначения и выберите Создать новый пункт назначения.
  2. В появившемся диалоговом окне New Android Component (Новый компонент Android) создайте фрагмент. Подробнее о фрагментах…

Вернувшись в редактор навигации, вы увидите, что Android Studio добавила этот пункт назначения на график.

На рисунке 2 показан пример пункта назначения и плейсхолдера пункта назначения.

Рисунок 2. Целевой сервис и плейсхолдер

Другие способы добавить пункты назначения в навигационный граф описаны в разделе Дополнительные пункты назначения.

Как создать пункт назначения на основе существующего фрагмента или действия

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

Затем выберите нужный вариант в раскрывающемся списке. Теперь в режиме Дизайн можно посмотреть, как выглядит целевая страница, а в режиме Текст – соответствующий XML-код навигационного графа.

Как создать целевую страницу для фрагмента

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

  1. В редакторе навигации нажмите на значок Новый пункт назначения .

    Затем нажмите Создать новый пункт назначения.

  2. В появившемся диалоговом окне New Android Component (Новый компонент Android) создайте фрагмент.

Вернувшись в редактор навигации, вы увидите, что Android Studio добавила этот пункт назначения на график.

На рисунке 3 показан пример пункта назначения и плейсхолдера пункта назначения.

Рисунок 3. Целевой сервис и плейсхолдер

Структура целевого сервиса

Нажмите на целевой сервис, чтобы выбрать его, и обратите внимание на следующие атрибуты на панели Атрибуты:

  • В поле Тип указано, реализован ли целевой объект как фрагмент, действие или другой специальный класс в исходном коде.
  • В поле Ярлык указано понятное пользователю название пункта назначения. Это может быть отражено в интерфейсе, например если вы подключите NavGraph к Toolbar с помощью setupWithNavController(). Поэтому для этого значения используйте строки ресурсов.
  • Поле ID содержит идентификатор пункта назначения, который используется для ссылки на пункт назначения в коде.
  • В раскрывающемся списке Класс указано название класса, связанного с целевой страницей. Нажмите на раскрывающийся список, чтобы изменить связанный класс на другой тип назначения.

Нажмите на вкладку Текст, чтобы посмотреть XML-представление графа навигации. В XML-файле для целевой страницы указаны те же атрибуты id, name, label и layout, что и в следующем фрагменте:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    app:startDestination="@id/blankFragment">
    <fragment
        android:id="@+id/blankFragment"
        android:name="com.example.cashdog.cashdog.BlankFragment"
        android:label="@string/label_blank"
        tools:layout="@layout/fragment_blank" />
</navigation>

Вы также можете добавить NavHostFragment в действие с помощью редактора макетов. Для этого выполните следующие действия:

  1. В списке файлов проекта дважды нажмите на XML-файл макета объекта activity, чтобы открыть его в редакторе макетов.
  2. На панели Палитра выберите категорию Контейнеры или найдите NavHostFragment.
  3. Перетащите представление NavHostFragment на нужное действие.
  4. В появившемся диалоговом окне Навигационные графы выберите нужный навигационный граф, который нужно связать с NavHostFragment, и нажмите ОК.

Как подключить целевые сервисы

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

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

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

  1. На вкладке Дизайн наведите указатель на правую сторону элемента, с которого пользователи должны переходить на другой элемент. На правой стороне пункта назначения появится круг, как показано на рисунке 4.

    Рисунок 4. Целевой сервис с подключением действий круг
  2. Перетащите курсор на нужный пункт назначения и отпустите кнопку мыши. Линия, соединяющая две точки назначения, представляет собой действие, как показано на рисунке 5.

    Рисунок 5. Как связать целевые страницы с действием
  3. Нажмите на стрелку, чтобы выделить действие. На панели Атрибуты представлены следующие атрибуты:

    • В поле Тип указано значение "Действие".
    • Поле ID содержит идентификатор действия.
    • Поле Целевой фрагмент содержит идентификатор целевого фрагмента или действия.
  4. Чтобы перейти к XML-коду, нажмите на вкладку Текст. В исходный целевой аккаунт добавлен элемент действия. У действия есть идентификатор и атрибут destination, который содержит идентификатор следующего пункта назначения, как показано в следующем примере:

    xml <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" app:startDestination="@id/blankFragment"> <fragment android:id="@+id/blankFragment" android:name="com.example.cashdog.cashdog.BlankFragment" android:label="@string/label_blank" tools:layout="@layout/fragment_blank" > <action android:id="@+id/action_blankFragment_to_blankFragment2" app:destination="@id/blankFragment2" /> </fragment> <fragment android:id="@+id/blankFragment2" android:name="com.example.cashdog.cashdog.BlankFragment2" android:label="@string/label_blank_2" tools:layout="@layout/fragment_blank_fragment2" /> </navigation>

В графе навигации действия представлены элементами <action>. Как минимум, действие содержит собственный идентификатор и идентификатор целевой страницы, на которую должен перейти пользователь.

Целевые сервисы с плейсхолдерами

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