Button navigation view android studio kotlin

Содержание
  1. Урок 13. Навигация в Android приложении. Интеграция в новый проект, добавление пунктов назначения (destinations) и переходов между ними (actions)
  2. Создаем новый проект в Android Studio
  3. Добавляем в проект библиотеку Navigation Architecture Component
  4. Navigation graph
  5. Navigation Editor
  6. NavHostFragment
  7. Добавление пунктов назначения
  8. Добавление переходов
  9. Навигация для Android с использованием Navigation Architecture Component: пошаговое руководство
  10. Часть 1. Подготовительные работы
  11. 1.1. Создание проекта
  12. 1.2. Зависимости (Dependencies)
  13. 1.3. Страницы: создание фрагментов
  14. 1.4. Адреса: файл ресурсов типа «Navigation»
  15. 1.5. Фрейм: виджет NavHostFragment
  16. Часть 2. Элементы навигации
  17. 2.1. Навигация с помощью кнопок
  18. 2.2. Боковое меню (drawer)
  19. 2.2.1. Ресурсный файл меню
  20. 2.2.2. Шаблон DrawerLayout и виджет NavigationView в макете активности
  21. 2.2.3. Подключение бокового меню в классе активности
  22. 2.3. Кнопка и название фрагмента на панели инструментов
  23. 2.4. Нижнее меню (Bottom Navigation)
  24. 2.5. Всплывающее меню (Overflow Menu)
  25. Краткие выводы и ссылка на github

Урок 13. Навигация в Android приложении. Интеграция в новый проект, добавление пунктов назначения (destinations) и переходов между ними (actions)

Продолжаем серию уроков по разработке android-приложений в Android Studio на языке Kotlin.

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

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

Создаем новый проект в Android Studio

Откройте среду разработки Android Studio. Создайте новый проект с использованием шаблона Empty Activity.

Для работы с компонентом навигации понадобится среда разработки Android Studio 3.3 или более новой версии. При разработке приложений я рекомендую всегда использовать стабильный релиз. На данный момент, это версия 3.6.1.

Чтобы убедиться, что вы используете стабильный релиз Android Studio, проверьте, что для обновления среды разработки используется стабильный канал. Для этого откройте меню Help> Check for updates> Configure automatic updates. В поле Автоматической проверки обновления должен быть выбран Stable Channel.

Добавляем в проект библиотеку Navigation Architecture Component

Чтобы добавить библиотеку Navigation Architecture Component в наш проект, откройте файл сборки build.gradle модуля App. Добавьте в секцию dependencies<> такие зависимости:

Также убедитесь, что в общем файле сборки build.gradle проекта присутствуют ссылки на репозитории google() и jcenter() :

После всех изменений синхронизируйте проект с Gradle.

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

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

Кликните правой кнопкой мыши на папке res вашего проекта и в контекстном меню выберите пункты New > Android Resource File. Откроется диалог New Resource File, где нужно указать имя файла, например, «nav_graph». В выпадающем списке Resource type выберите Navigation. Нажмите кнопку ОК для закрытия диалога и создания файла навигационного графа.

В результате Android Studio создаст в папке res папку navigation, и в ней файл nav_graph.xml.

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

Читайте также:  Есть ли teamviewer для андроид

Переключитесь на текстовое представление:

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

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

Чтобы добавить хост, откройте файл разметки activity_main.xml в редакторе макетов. Переключитесь на вкладку дизайна. В палитре компонентов слева найдите в группе Containers компонент NavHostFragment и перетащите его в макет активити. При этом откроется окно выбора навигационного графа, где показан тот, который мы недавно создали – выберите его. Выполните привязку компонента к краям экрана, нажав и потянув поочередно каждый из маркеров к своему краю экрана. Затем переключитесь в режим текста и укажите размеры для компонента NavHostFragment – 0dp. Компонент займет весь экран.

Добавление пунктов назначения

Давайте добавим новый фрагмент в приложение, шелкнув правой клавишей мыши по главному пакету приложения и выбрав пункты контекстного меню: New> Fragment> Fragment (Blank). После содания макет разметки этого фрагмента будет доступен для выбора в редакторе навигации. Кликните по кнопке с изображением экрана с зеленым плюсиком в правом нижнем углу, и в окне добавления пункта назначения вы увидите список макетов разметки. Выберите только что добавленный фрагмент, и он добавится на центральную панель. Обратите внимание – он обозначен иконкой в виде домика – это значит, что это домашний, стартовый экран для этого навигационного графа.

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

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

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

Добавление переходов

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

Если мы посмотрим на текстовое представление, то увидим, что у домашнего фрагмента появился тег , внутри которого обозначен идентификатор действия и пункт назначения.

Теперь откройте макет домашнего фрагмента и вместо шаблонного текста в поле TextView добавьте цифру 1, а размер текста установите побольше. Также добавьте сюда кнопку. В макете второго фрагмента аналогично напишите цифру 2.

Теперь в классе первого фрагмента переопределите метод жизненного цикла onViewCreated() и внутри него напишите код слушателя нажатия кнопки:

Источник

Попробуем, пользуясь официальным руководством и примерами кода, построить работающую систему навигации для будущего многоэкранного приложения в соответствии со стандартами Navigation Architecture Component. Статья включает следующие разделы:

Часть 1. Подготовительные работы
— 1.1. Создание проекта
— 1.2. Зависимости (Dependencies)
— 1.3. Страницы: создание фрагментов
— 1.4. Адреса: файл ресурсов типа «Navigation»
— 1.5. Фрейм: виджет NavHostFragment

Часть 2. Элементы навигации
— 2.1. Навигация с помощью кнопок
— 2.2. Боковое меню (Drawer)
— 2.3. Панель инструментов: Toolbar вместо ActionBar
— 2.4. Нижнее меню (Bottom Navigation)
— 2.5. Всплывающее меню (Overflow Menu)

Краткие выводы и ссылка на github

Читайте также:  Life 360 для андроида

Часть 1. Подготовительные работы

1.1. Создание проекта

Нам понадобятся базовые знания Котлина, IDE Android Studio версии не ниже 3.3, смартфон или эмулятор с версией API 14 или выше.

Создадим в Android Studio новый проект под названием «Navigation2019».

IDE создаст файл главной активности «MainActivity.kt» и его макет (шаблон) «activity_main.xml».

1.2. Зависимости (Dependencies)

Откроем файл «build.gradle» модуля (не проекта, а именно модуля) и в блок «dependencies» добавим необходимые зависимости:

Мы использовали библиотеки версии 1.0.0, но в будущем ситуация может измениться. Проверить, какие версии библиотек являются актуальными, можно здесь.

1.3. Страницы: создание фрагментов

Фрагменты — это «страницы» нашего будущего приложения. Кликнув правой кнопкой на каталоге с файлами классов, командой «New -> Fragment -> Fragment(Blank)» создадим «Fragment1».

IDE создаст kt-файл с классом фрагмента и xml-файл с макетом фрагмента. Таким же образом сгенерируем ещё три фрагмента («Fragment2», «Fragment3», «Fragment4»). Мы будем использовать их для создания четырёх разных типов навигации по приложению.

1.4. Адреса: файл ресурсов типа «Navigation»

Кликнув правой кнопкой мыши по папке «res», создадим файл ресурсов типа «Navigation» с названием «routes.xml» («маршруты»).

Откроем созданный файл и с помощью кнопки «New Destination» добавим в навигационную схему наши фрагменты.

«Хватаясь» мышкой за точку в середине правой стороны фрагмента, соединим фрагменты друг с другом так, как они должны быть связаны в приложении.

В соответствии с их названиями, наши фрагменты получат идентификаторы (id) «fragment1», «fragment2», «fragment3», «fragment4». Это «адреса», которые будут использоваться при указании пунктов назначения («destinations») в инструкциях навигационному контроллеру.

Кроме «id», каждый тег «fragment» содержит ещё три параметра: «name», «label» и «layout». Параметры «name» и «layout» нас сейчас не интересуют. Единственное, что стоит отредактировать в файле «routes.xml» — это названия («label») фрагментов. Заменим их на «Фрагмент №1», «Фрагмент №2», «Фрагмент №3» и «Фрагмент №4».

1.5. Фрейм: виджет NavHostFragment

Откроем файл макета «res/layout/activity_main.xml» и удалим текстовый виджет «Hello World!», он нам не понадобится. В палитре (Palette) выберем раздел «Контейнеры» (Containers) и перетащим оттуда на макет активности виджет NavHostFragment (указав наш файл «routes» в качестве источника информации для него). Он выполнит роль фрейма, в котором будут выводиться различные фрагменты приложения.

Изменим id фрагмента на «navFragment». Код макета главной активности будет выглядеть теперь так:

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

Часть 2. Элементы навигации

2.1. Навигация с помощью кнопок

Откроем макет первого фрагмента («fragment_fragment1.xml»). Удалим ненужный текстовый виджет, изменим тип макета с «FrameLayout» на линейный вертикальный и добавим три кнопки с идентификаторами «button2», «button3», «button4» и соответствующими названиями «Фрагмент 2», «Фрагмент 3», «Фрагмент 4».

В методе «onCreateView» фрагмента получим ссылку на навигационный контроллер (объект «NavController») и запрограммируем поведение при нажатии на кнопки: командой «setOnClickListener» для каждой кнопки создадим слушателя кнопки, который при клике по кнопке будет передавать навигационному контроллеру адрес (id) точки назначения вместе с командой переместиться (navigate) на указанный адрес.

Проверим, как работают наши кнопки.

Одна кнопка — одна строчка кода — и клик по кнопке перемещает нас к указанному фрагменту. Просто, не так ли?

Но без меню не очень удобно, приходится использовать кнопку «Назад» для возвращения на стартовый экран.

2.2. Боковое меню (drawer)

2.2.1. Ресурсный файл меню

В каталоге «res/menu» создадим ресурсный файл меню «drawer_menu.xml». Добавим в него пункты меню, каждый из которых представляет собой тег «item» с параметрами «id» (должен соответствовать таковому в навигационном графе «routes.xml», «title» (заголовок, он может быть другим), «icon» (мы используем одну и ту же картинку для всех пунктов, но, конечно же, они могут быть разными) и др. Наше меню будет выглядеть так:

Читайте также:  Msi afterburner android как настроить

2.2.2. Шаблон DrawerLayout и виджет NavigationView в макете активности

Откроем файл макета активности «activity_main.xml».

После первого тега (xml version…) добавим начало тега «DrawerLayout».

В конец файла добавим виджет «NavigationView» и окончание тега «DrawerLayout».

2.2.3. Подключение бокового меню в классе активности

Откроем файл «MainActivity.kt» и в методе «onCreate» получим ссылку на «navController» (в активности это выглядит чуть сложнее, чем было во фрагментах).

Затем включим боковое меню:

Код класса теперь выглядит так:

Теперь меню появляется в ответ на свайп от левого края экрана:

Хорошо было бы добавить и кнопку слева-вверху для вызова бокового меню, верно?

2.3. Кнопка и название фрагмента на панели инструментов

Существующий по умолчанию ActionBar, как рекомендует официальное руководство, заменим на Toolbar.

Чтобы отключить существующий ActionBar, в файле «res/values/styles.xml» найдём строку

и заменим «DarkActionBar» на «NoActionBar».

Отлично, ActionBar мы отключили.

Теперь добавим Toolbar. Откроем файл «activity_main.xml», в палитре (Palette) выберем раздел «Контейнеры» (Containers) и перетащим оттуда на макет активности виджет «Toolbar». Панель инструментов добавлена, но она пока пуста.

Переходим в файл активности «MainActivity.kt». Чтобы на Toolbar вывести кнопку и название текущего фрагмента, в метод «onCreate()» добавим следующие строки:

Toolbar теперь выводит название фрагмента и кнопку «Вверх» (Up) для вложенных фрагментов.

Кнопка «вверх» в android’е почему-то обозначается стрелкой «влево»:

Чтобы на стартовом экране приложения выводилась кнопка-гамбургер, нам необходимо в конфигурацию панели инструментов добавить параметр «drawerLayout», который содержит id виджета DrawerLayout из файла «activity_main.xml».

Клик по этой кнопке выводит боковое меню.

2.4. Нижнее меню (Bottom Navigation)

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

Сначала создадим ресурсный файл меню «bottom_nav_menu.xml» с парой ссылок. Затем откроем макет фрагмента №3 (файл «fragment_fragment3.xml») и перетащим на него виджет «BottomNavigationView», попутно согласившись с предложением IDE добавить в dependencies библиотеку «com.android.support:design».

Если бы мы создавали нижнее меню не для одного фрагмента, а сразу для всех, то в метод «onCreate» класса активности (файл «MainActivity.kt») нужно было бы включить следующий код:

Конечно, и виджет «BottomNavigationView» в таком случае надо было бы поместить в макет активности, а не фрагмента.

Но поскольку данное меню нам требуется только во фрагменте №3, то и редактировать мы будем класс фрагмента (файл «Fragment3.kt»), а код будет выглядеть чуть сложнее:

В итоге мы получим нижнее меню, которое будет выводиться только в 3-м фрагменте.

То же самое, но с другими ссылками, сделаем и в 4-м фрагменте.

2.5. Всплывающее меню (Overflow Menu)

Ещё один вид меню — всплывающее меню, которое выводится при клике по кнопке (трём вертикально расположенным точкам) в правом верхнем углу экрана.

Создадим ресурсный файл меню «top_right_menu.xml» с необходимыми ссылками.

В файле «MainActivity» в метод «onCreate» перед «toolBar.setupWithNavController. » добавим строку «setSupportActionBar(toolBar)».

И далее в этом же классе переопределим два метода:

Нажатие на верхнюю правую кнопку теперь отображает всплывающее меню:

Краткие выводы и ссылка на github

Очевидно, что Navigation Architecture Component существенно облегчает труд разработчика. Сложные в прошлом задачи теперь решаются несколькими строчками кода.

Поскольку главной целью данной публикации было осветить базовые алгоритмы создания навигации в android-приложении, многие детали реализации были умышленно оставлены за кадром.

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

Источник

Оцените статью