- Полный список
- NavigationUI
- Overflow menu
- Navigation Drawer
- BottomNavigationView
- Обработка нажатия динамического меню NavigationView
- Урок 27. Navigation. NavigationUI.
- NavigationUI
- Overflow menu
- Navigation Drawer
- BottomNavigationView
- Как сделать Navigation Drawer в Android
- В этом уроке:
- Navigation Drawer Design
- Создать макет Navigation Drawer
- Инициализируем Drawer List
Полный список
В этом уроке рассмотрим интеграцию Navigation Component c Overflow Menu, Navigation Drawer и BottomNavigationView.
Полный список уроков курса:
Сначала сделаю небольшое дополнение к прошлым урокам. В них вся работа с NavController велась в Activity, в котором находился контейнер NavHostFragment.
Код получения контроллера в Activity выглядит так:
Но контроллер может понадобится и в фрагменте, который находится в контейнере. В примерах это были Fragment1, Fragment2 и т.п.
В этих фрагментах, контроллер может быть получен так:
Где view — это любое View в этом фрагменте.
Пример использования в OnClickListener
Персонально для OnClickListener, кстати, создан отдельный метод Navigation.createNavigateOnClickListener, позволяющий повесить обработчик на кнопку так:
По нажатию на кнопку будет выполнена навигация к fragment2.
NavigationUI
NavigationUI — набор методов, позволяющих интегрировать Navigation Component с меню, Navigation Drawer и BottomNavigationView.
Для использования, необходимо добавить в dependencies:
Overflow menu
Есть такое меню
Оно будет отображаться в Activity.
Обратите внимание на ID, которые я использовал в меню: @+id/fragment1, и т.д. Те же ID использованы для destination в графе:
Теперь в обработке нажатий используем метод NavigationUI.onNavDestinationSelected.
Под капотом будет выполнена навигация к destination с >
Соответственно при нажатии на пункт меню с будет выполнена навигация к destination с тем же ID, т.е. fragment2.
Для пунктов меню можно использовать ID не только от destination, но и от action.
Navigation Drawer
Есть Drawer, который отображает следующее меню
Обычно, чтобы обрабатывать нажатия на эти пункты меню, мы вешаем обработчик на NavigationView, который внутри DrawerLayout.
Но вместо этого мы можем сделать так:
Этот метод сам повесит обработчик на NavigationView и по нажатию на пункты меню будет выполнять навигацию к destination (или action) с тем же ID, что и у нажатого пункта меню. Также он сам будет выделять пункт меню (setChecked) и закрывать Drawer.
При этом параметру Pop To будет задан стартовый destination. Т.е. системная кнопка Back всегда будет возвращать нас в Fragment 1.
Все ок, но можно сделать еще лучше.
Добавляем интеграцию ActionBar. Теперь при навигации в ActionBar будет помещаться Label у destination. И иконка будет меняться, если находимся не в стартовом destination.
Нажатие на Home обрабатываем сами
BottomNavigationView
Есть BottomNavigationView, отображающий меню:
Чтобы обработать его нажатия, мы обычно вешаем обработчик. За нас это может сделать Navigation.
Метод setupWithNavController вешает листенер на BottomNavigationView и выполняет навигацию при нажатии на его элементы. При этом выполняет setChecked для нажатого элемента.
Системная кнопка Back всегда будет возвращать нас на стартовый destination.
Можно добавить интеграцию с ActionBar:
Теперь при навигации в ActionBar будет помещаться Label у destination. И иконка будет меняться, если находимся не в стартовом destination.
В этом случае надо самим обработать нажатие на Home.
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Обработка нажатия динамического меню NavigationView
Привет всем. Подскажите пожалуйста, как правильно обработать выбор пункта меню в Navigation Drawer, если id меню мы получаем динамически из базы данных, вот кусок кода создания меню:
Обработка нажатия элементов контекстного меню
Здравствуйте! Выполняю ДЗ по урокам андройд и вот с чем столкнулся. public class MainActivity.
Обработка нажатия на пункты меню приложения
Здравствуйте!Я начинающий в андроид студио, поэтому помогите пожалуйста.У меня в приложении есть.
Обработка нажатия по координатам
Есть ImageView (.png). Нужно обработать нажатия через OnTouchListener в 3-х местах этого png файла.
Обработка нажатия EditText
Необходимо реализовать поля ввода дат для задания периода. Так как надо по дизайну чтобы подсказка.
А не подскажите, как мне передать idCategory, если в рамках цикла ему будет инициализировано последнее значение из БД?
Добавлено через 1 час 9 минут
@Override
* * public boolean onNavigationItemSelected(MenuItem item) <
* * * * int/> * * * * if (id == idCategory) <
* * * * >
* * return true;
>[/quote]
У меня так и подключен обработчик, дело в том, что idCategory не передает значение при нажатии на пункт меню
Я понятия не имею, что у тебя в idCategory.
Добавлено через 4 минуты
Я думал у тебя так, нажал — получил id, сравнил его с id из базы, выполнил действие, если совпало.
Вот полный код. По сути я беру с базы id элемента (первичный ключ) и присваиваю его к переменной idColumn, далее эта переменная задается в categoryMenu.add(0, idColumn, 0, nameColumn); где как раз idColumn и должен выступать как индекс пункта меню, что бы его отправить в onNavigationItemSelected, но так как формируется динамически, я не знаю как его отследить. В живом приложении это по сути меню с категориями, которые может создавать/удалят/редактировать пользователь и суть его это при выборе сортировка по выбранному значению.
Обработка нажатия на RadioButton
Постигаю андроид. Не могу разобраться со свичем. EditText принимает число, сохранил его, дальше.
Обработка нажатия кнопок
Здравствуйте! Недавно начал изучать программирование под Android. Узнал что для обработки нажатия.
Обработка нажатия кнопок
Всем привет! Целый день мучала проблема. Что имею: телефон по bluetooth подключается к arduino и.
Обработка длительного нажатия
В игре нужно перемещать предмет тогда, когда палец на экране: пальцем касаюсь экрана (не важно, в.
Источник
Урок 27. Navigation. NavigationUI.
В этом уроке рассмотрим интеграцию Navigation Component c Overflow Menu, Navigation Drawer и BottomNavigationView.
Полный список уроков курса:
Сначала сделаю небольшое дополнение к прошлым урокам. В них вся работа с NavController велась в Activity, в котором находился контейнер NavHostFragment.
Код получения контроллера в Activity выглядит так:
Но контроллер может понадобится и в фрагменте, который находится в контейнере. В примерах это были Fragment1, Fragment2 и т.п.
В этих фрагментах, контроллер может быть получен так:
Где view — это любое View в этом фрагменте.
Пример использования в OnClickListener
Персонально для OnClickListener, кстати, создан отдельный метод Navigation.createNavigateOnClickListener, позволяющий повесить обработчик на кнопку так:
По нажатию на кнопку будет выполнена навигация к fragment2.
NavigationUI
NavigationUI — набор методов, позволяющих интегрировать Navigation Component с меню, Navigation Drawer и BottomNavigationView.
Для использования, необходимо добавить в dependencies:
Overflow menu
Есть такое меню
Оно будет отображаться в Activity.
Обратите внимание на ID, которые я использовал в меню: @+id/fragment1, и т.д. Те же ID использованы для destination в графе:
Теперь в обработке нажатий используем метод NavigationUI.onNavDestinationSelected.
Под капотом будет выполнена навигация к destination с >
Соответственно при нажатии на пункт меню с будет выполнена навигация к destination с тем же ID, т.е. fragment2.
Для пунктов меню можно использовать ID не только от destination, но и от action.
Navigation Drawer
Есть Drawer, который отображает следующее меню
Обычно, чтобы обрабатывать нажатия на эти пункты меню, мы вешаем обработчик на NavigationView, который внутри DrawerLayout.
Но вместо этого мы можем сделать так:
Этот метод сам повесит обработчик на NavigationView и по нажатию на пункты меню будет выполнять навигацию к destination (или action) с тем же ID, что и у нажатого пункта меню. Также он сам будет выделять пункт меню (setChecked) и закрывать Drawer.
При этом параметру Pop To будет задан стартовый destination. Т.е. системная кнопка Back всегда будет возвращать нас в Fragment 1.
Все ок, но можно сделать еще лучше.
Добавляем интеграцию ActionBar. Теперь при навигации в ActionBar будет помещаться Label у destination. И иконка будет меняться, если находимся не в стартовом destination.
Нажатие на Home обрабатываем сами
BottomNavigationView
Есть BottomNavigationView, отображающий меню:
Чтобы обработать его нажатия, мы обычно вешаем обработчик. За нас это может сделать Navigation.
Метод setupWithNavController вешает листенер на BottomNavigationView и выполняет навигацию при нажатии на его элементы. При этом выполняет setChecked для нажатого элемента.
Системная кнопка Back всегда будет возвращать нас на стартовый destination.
Можно добавить интеграцию с ActionBar:
Теперь при навигации в ActionBar будет помещаться Label у destination. И иконка будет меняться, если находимся не в стартовом destination.
В этом случае надо самим обработать нажатие на Home.
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Как сделать Navigation Drawer в Android
В этом уроке:
- Как создать макет для Navigation Drawer
- Как инициализировать Navigation Drawer
- Как обработать событие выбора пункта в списке меню Navigation Drawer
- Как установить слушатель (listener) на открытие и закрытие Navigation Drawer
- Открытие и закрытие Navigation Drawer по нажатию значка приложения в тулбаре
- Скачать образец приложения с Navigation Drawer
- Скачать Android Design Icons
- Как разместить Navigation Drawer под Toolbar’ом
Navigation Drawer (навигационная секция) — боковая панель, которая выводит на экран основные навигационные опции приложения в левой части экрана. Она скрыта большую часть времени, и отображается по свайпу от левого края экрана или нажатию значка приложения в ActionBar.
Этот урок описывает, как реализовать Navigation Drawer, используя API-интерфейсы, доступные в библиотеке поддержки android.support.v4.
Полный код приложения с Navigation Drawer можно скачать по ссылке внизу страницы.
Navigation Drawer Design
Прежде чем вы решите использовать Navigation Drawer в вашем приложении, вы должны ознакомиться с примерами использования и принципами проектирования, определенными в Navigation Drawer: руководство по проектированию.
Смотрите видео, как использовать готовый шаблон Navigation Drawer Activity в Android Studio — структура шаблона, пример работы в приложении.
Создать макет Navigation Drawer
Чтобы добавить Navigation Drawer, объявите пользовательский интерфейс с DrawerLayout объектом в качестве корневого View вашего макета. Внутри , добавьте View, который содержит основной контент для экрана (основной макет, когда панель навигации скрыта) и еще один View, который содержит содержимое Navigation Drawer.
Ниже приведен код макета, который использует DrawerLayout с двумя дочерними View: FrameLayout для основного содержания ( Фрагмент , создаваемый динамически во время работы программы), и ListView для боковой панели навигации.
Этот макет имеет некоторые важные особенности:
Основной View с контентом (в FrameLayout выше) должен быть первым дочерним элементом в DrawerLayout, для того, чтобы панель навигации была над контентом.
Основному View устанавливается значение match_parent для ширины и высоты, поскольку он представляет весь интерфейс, когда скрыт NavigationDrawer.
Для ListView необходимо указывать параметр горизонтального выравнивания с помощью атрибута android:layout_gravity. Поддержка RTL-языков (справа налево) решается указанием значения «start» вместо «left» (в таком случае Navigation Drawer будет появляться справа на RTL макете).
Ширину ListView указываем в dp, а высоту ставим match_parent. Ширина боковой панели навигации должна быть не более 320dp, чтобы пользователь мог всегда видеть часть основного контента.
Инициализируем Drawer List
В классе activity в первую очередь необходимо инициализировать список элементов для Navigation Drawer. Как вы это сделаете зависит от контента вашего приложения. Панель навигации включает в себя listview, поэтому список должен быть заполнен с помощью адаптера (например ArrayAdapter или SimpleCursorAdapter).
Например, вот как можно инициализировать Navigation Drawer со строкой массива:
Источник