- Реализуем боковую навигацию в Android
- Архитектура приложения
- Создаем разметку, реализуем смену фрагментов
- Боковая навигация по клику
- Настройка боковой панели андроид
- Android Studio: Как сделать боковое меню с помощью NavigationDrawer
- Файл nav_header_main.xml
- Файл activity_main_drawer
- Файл content_main.xml
- Градиент в side_nav_bar
- Смотрите видео Android Studio: Как сделать боковое меню с помощью NavigationDrawer:
Реализуем боковую навигацию в Android
В последнее время среди паттернов проектирования мобильных приложений наблюдается устойчивая тенденция к упрощению взаимодействия пользователя с конечным приложением. В частности, особый упор начал делаться на распознавание жестов. Жесты интуитивно понятны и естественны, они удобны и позволяют избавиться от лишних элементов интерфейса, упрощая приложение.
Хороший пример правильного использования жестов — набирающая популярность боковая навигация. На Хабре ранее публиковалась статья о боковой навигации как паттерне, но в ней ничего не было сказано о реализации.
К сожалению, проектов, реализующих боковую навигацию, крайне мало, да и большая часть из них работает медленно и неудобно. Мне повезло: спустя некоторое время после начала поиска я наткнулся на проект ActionsContentView, который, на мой взгляд, работал хорошо и быстро. В проекте были решены все те проблемы, с которым я столкнулся когда-то сам. После внимательного изучения проекта он был немного переписан мною под собственные нужды.
Изначально я хотел в этой статье расписать как и способ открытия бокового меню по клику, так и способ открытия меню жестом. Однако ближе к концу статьи стало очевидно, что обработка жестов и открытие навигации по ним достаточно объемный вопрос, в котором также следует учесть множество особенностей. Статья в таком случаем получается настолько огромная, что читать ее просто неудобно.
Поэтому я решил описать пока лишь реализацию бокового меню по клику.
Архитектура приложения
В качестве слоя с контентом мы будем использовать Fragment, меню же у нас будет располагаться в Activity на заднем плане.
Преимущество фрагментов очевидно: фактически, мы сможем использовать внутри них все преимущества Activity, плюс из Activity слой с фрагментом видится как View, что позволит нам использовать стандартные и привычные методы работы с ним как со слоем.
Activity мы сделаем статичным, при переходах внутри фрагмента у нас должен меняться только сам фрагмент. Также необходимо предусмотреть во фрагменте метод старта нового фрагмента в этом же окне, а также методы открытия/закрытия меню.
Для реализации этого создадим интерфейс, описывающий методы взаимодействия фрагмента и Activity:
Реализуем его в Activity:
Так как нам необходимо иметь доступ вышеперечисленным методам из любого фрагмента с контентом, расширим класс Fragment и добавим их:
В дальнейшем все наши фрагменты мы будем наследовать от него.
Создаем разметку, реализуем смену фрагментов
Теперь нам потребуется создать список, имитирующий само меню, и заполнить его. Также нам потребуется сам фрагмент с контентом.
Файл разметки Activity невероятно прост:
Так же, как и его заполнение:
Создадим и добавим теперь наш фрагмент:
По этой кнопке, как вы уже догадались, мы будем открывать или закрывать меню.
Реализуем пока механизм смены фрагментов:
Добавим получившийся фрагмент поверх Activity:
Каркас готов, теперь можно реализовывать саму боковую навигацию.
Боковая навигация по клику
Метод toggleMenu() автоматически в зависимости от состояния меню открывает или закрывает его. Соответственно, нам необходимо хранить состояние.
Также нам необходимо иметь значение координаты, до которой меню будет «доезжать» в случае открытия. Так как дисплеи мобильных телефонов имеют разную ширину, хранить необходимо коэффициент, а само значение вычислять исходя из разрешения телефона.
Желательно также указать и продолжительность действия анимации открытия и закрытия в миллисекундах.
Теперь немного о реализации класса, который будет прокручивать меню. Для наших целей мы будем использовать класс Scroller, инкапсулирующий прокрутку. Фактически этот класс принимает в себя начальную точку и значение смещения, а затем в течении некоторого времени генерирует некое число.
Чаще всего Scroller используют внутри потока, рекурсивно вызывающего себя. Во всех примерах, которые я встречал, Scroller используется именно так.
Возможно его можно использовать и совместно с бесконечным циклом в отдельном потоке, однако я решил использовать именно такую реализацию.
За открытие/закрытие меню у нас отвечают методы openMenu() и closeMenu(). Этим методы реинициализируют переменные начала скроллинга и запускают метод fling(), занимающийся, собственно, сдвигом.
В методе fling() после ряда проверок запускается отсчет Scroller’a, после же запускается поток.
Метод run() потока выполняет два действия:
- Пока анимация присутствует, с помощью View.scrollTo() сдвигает элемент на значение, указываемое Scroller
- Рекурсивно запускает свой поток еще раз, для последующей анимации
Собственно, сам класс, сделан внутренним:
Теперь нам осталось лишь инициализировать такое поле в классе и заполнить toggleMenu():
Готово. Мы имеем быстрое боковое меню, открывающееся по кнопке. Единственный баг — меню прокручивается во время скроллинга по фрагменту. Для устранения этого бага необходимо проверять, входят ли координаты нажатия пальца в область фрагмента и в зависимости от этого определять, используется ли событие или нет.
Вот теперь все работает.
Полученное боковое меню очень быстро работает на самых разных телефонах, при этом у нас имеется готовое архитектурное решение организации смены экранов.
Источник
Настройка боковой панели андроид
Краткое описание:
Сделайте свой телефон быстрее, мощнее и проще
Описание:
Одним из преимуществ флагманских смартфонов является краевой экран и крайняя панель, которые позволяют пользователям запускать любимые приложения, переключать системные настройки, вызывать определенные контакты, управлять воспроизведением музыки, проверять события календаря и даже получать доступ к папкам и файлам прямо из боковой панели приложения. Боковая панель открывается мягким скользящим жестом.
Edge Action — Edge Screen, как следует из названия, привносит эту замечательную особенность в буквальном смысле на любые устройства, и вы получаете возможность пользоваться многими преимуществами на вашем телефоне или планшете. Таким образом, скачайте Edge Action — Edge Screen на свое устройство бесплатно, наслаждайтесь приложением и воспользуйтесь функциями на вашем телефоне.
Чего ожидать от Edge Action — Edge Screen?
Edge Action — Edge Screen, бесплатное приложение боковой панели, имеющее чистый и аккуратный дизайн, и интерфейс настолько удобен для пользователя, что не стоит гениально разбираться во всей идее. Вам просто нужно предоставить необходимые разрешения, настроить крайние панели и получить доступ к любимым приложениям, переключению системных настроек, музыкальному проигрывателю и многому другому, запустив различные боковые панели.
Ниже приведен список доступных краевых экранов, доступ к которым можно получить в любом месте.
Обратите внимание, что в зависимости от боковой панели приложения, которую вы добавляете на свою краевую панель, вам может потребоваться предоставить определенные разрешения. Разрешения используются исключительно для функциональности приложения, и мы не собираем никаких личных данных.
Настало время увеличить вашу производительность.
После того, как вы полностью сконфигурировали приложение и добавили необходимые боковые панели, вам больше не нужно добавлять ярлыки быстрых системных настроек, а также ярлыки приложений на домашний экран для быстрого доступа к ним.
Вы также можете использовать свой телефон одной рукой, так как вам не нужно растягивать палец, чтобы перейти к кнопкам «Домой», «Назад» и «Недавние», а также к панели уведомлений.
Загрузите Edge Action — Edge Screen бесплатно и сообщите нам о любых ошибках, вопросах, пожеланиях или других предложениях.
- Приложения – добавьте свои любимые и часто используемые приложения в боковую панель и откройте их, просто сдвинув.
Контакты – как обычно вы звоните или отправляете сообщение своим частым контактам? Как насчет добавления их в панель «Контакты» и получать доступ к ним практически из любого места?
Быстрые настройки – ваш телефон слишком большой, чтобы открыть панель уведомлений одной рукой? Попробуйте переключить системные настройки из боковой панели приложения.
Виртуальные кнопки – физические кнопки вашего телефона не работают гладко? Панель «Виртуальные клавиши» предоставляет вам программные кнопки, которые работают как «Домой», «Назад», «Экран», «Запись экрана» и «Кнопки питания».
Календарь – вашим встречам и меропреятиям никогда не было проще получить доступ через панель «Календарь».
Журнал вызовов – эта панель позволяет вам получить доступ к журналу вызовов и управлять историей.
Сообщение – быстрый доступ к вашим сообщениям, папкам «Входящие» и «Отправленные».
Калькулятор – простой калькулятор помогает вам быстро и легко выполнять вычисления.
Музыкальный плеер – можете ли вы придумать самый крутой и простой способ контролировать музыку? Давайте попробуем функцию музыкального плеера.
Версия: 1.8.8 Premium by Balatan (Alex0047)
Версия: 1.8.9 GP Сообщение №132, автор And_RU
Версия: 1.8.6 Premium by Balatan (Alex0047)
Версия: 1.8.5 GP Сообщение №126, автор And_RU
Версия: 1.8.4 Premium by Balatan (Alex0047)
версия: 1.4.6 Mod Edge Action (serov_V)
Версия: 1.8.3 Premium by Balatan (Alex0047)
Версия: 1.8.1 Premium by Balatan (Alex0047)
Версия: 1.7.7 GP Сообщение №114, автор And_RU
Версия: 1.7.4 Premium (Alex0047)
Версия: 1.7.3 GP Сообщение №106, автор And_RU
Версия: 1.7.1 GP Сообщение №104, автор And_RU
Версия: 1.7.3 Premium (Alex0047)
версия: 1.7.0 Premium Edge Action (And_RU)
версия: 1.6.6 Premium Edge Action (Alex0047)
версия: 1.6.3 Premium Edge Action (Alex0047)
версия: 1.6.2 Premium Edge Action (Alex0047)
версия: 1.5.8 Premium Edge Action (Alex0047)
версия: 1.5.7 Premium Edge Action (Alex0047)
версия: 1.5.6 Premium Edge Action (Alex0047)
версия: 1.5.5 Premium Edge Action (Alex0047)
версия: 1.5.4 Premium Edge Action (Alex0047)
версия: 1.5.3 Premium Edge Action (Alex0047)
версия: 1.5.2 Premium Edge Action (Alex0047)
версия: 1.5.1 Premium Edge Action (Alex0047)
версия: 1.5.0 Premium Edge Action (Alex0047)
версия: 1.4.6 Premium Edge Action (Alex0047)
версия: 1.4.4 Premium Edge Action (Alex0047)
версия: 1.4.3 Premium Edge Action (Alex0047)
версия: 1.4.2 Rus Edge Action (papasha55)
версия: 1.4.2 Premium Edge Action (Alex0047)
версия: 1.4.1 Premium Edge Action (Alex0047)
версия: 1.4.0 Premium Edge Action (Alex0047)
версия: 1.3.9 Premium Edge Action (Alex0047)
версия: 1.3.8 Premium Edge Action (Alex0047)
версия: 1.3.4 Premium Edge Action (Alex0047)
версия: 1.3.3 Premium Edge Action (Alex0047)
версия: 1.3.2 Premium Edge Action (Alex0047)
версия: 1.3.1 Premium Edge Action (Alex0047)
версия: 1.2.9 Premium Edge Action (Alex0047)
версия: 1.2.8 Premium Edge Action (Alex0047)
версия: 1.2.7 Premium Edge Action (Alex0047)
версия: 1.2.6 Premium Edge Action (Alex0047)
версия: 1.2.5 Premium Edge Action (Alex0047)
версия: 1.2.3 Premium Edge Action (Alex0047)
версия: 1.2.1 Premium Edge Action (Alex0047)
версия: 1.2.0 Premium Edge Action (Alex0047)
версия: 1.1.9 Premium Edge Action (Alex0047)
версия: 1.1.8 Premium Edge Action (Alex0047)
версия: 1.1.7 Premium Edge Action (Alex0047)
версия: 1.1.6 Premium Edge Action (Alex0047)
версия: 1.1.5 Premium Edge Action (Alex0047)
версия: 1.1.4 Mod Edge Action (Zeratul)
версия: 1.1.4 Premium Edge Action (Alex0047)
версия: 1.1.3 Premium Edge Action (Alex0047)
версия: 1.1.2 Premium Edge Action (Alex0047)
версия: 1.1.1 Premium Edge Action (Alex0047)
версия: 1.1.0 Premium Edge Action (Alex0047)
версия: 1.0.9 GP Edge Action (Zeratul)
версия: 1.0.8 Premium Edge Action (Vologhat)
версия: 1.0.7 Premium Edge Action (Zeratul)
версия: 1.0.7 Edge Action v1.0.7.apk ( 10.18 МБ )
Сообщение отредактировал iMiKED — 24.11.21, 04:07
Источник
Android Studio: Как сделать боковое меню с помощью NavigationDrawer
В этой статье давайте разберем, как сделать «крутое» боковое меню с помощью компонента NavigationDrawer.
Создадим новый проект, пусть он называется NavDraw, так как использовать на этот раз будем не Empty Activity а Navigation Drawer Activity, шаблон заготовку изAndroid Studio.
После запуска проекта и эмулятора, можно увидеть, как выглядит боковое меню. Справа располагается обычное меню, как сделать которое мы разбирали в прошлых статьях.
Собственно, создание Navigation Drawer меню заключается в изменении существующей заготовки под свои нужды. Этим и займемся сегодня.
Давайте для примера их переведём на русский язык. Для этого давайте определимся, где и что у нас находится в каком файле, какие элементы. Как видите, это многослойный пирог получается, в одном файле хранится часть ресурсов, отвечающих за изображение вверху меню.
Файл nav_header_main.xml
Вот конкретно в этом файле nav_header_main мы сейчас изменим название. Я напишу название на свой лад «NavDraw — боковое меню» в этом textview, в следующим TextView указан адрес android studio, но я напишу название своего сайта.
Картинку я пока менять не буду я не нашел честно говоря, но вы можете в принципе аналогичным образом прописать в папки drawable новую иконку. Они тут расположены в png формате, есть некоторые в xml.
Можно в принципе использовать либо такие, либо такие, но я пока просто покажу вам где она находится если захотите, будете менять уже под свои нужды. Давайте перезапустим наше приложение и посмотрим, что у нас получится.
По идее, данные должны обновиться, так работает большинство приложений, кто собирает на Android Studio.
И в принципе не надо здесь все с нуля как бы переписывать создавать, все уже готово.
Вот кстати, здесь отличие -меню будет работать, которое находится в правом углу, (три точки) без всяких шаманств, изощрений, не как в прошлый раз. В прошлом видео я вам показывал: прописываете кучу стиле и прочего.
Файл activity_main_drawer
Так давайте теперь найдем в папке меню
Вот непосредственно наши пункты, как видите, здесь схалтурили разработчики этого шаблона — они прописали хардкорно пункт android title прямо в теле xml.
А в strings.xml ничего не прописано, но мы не будем сейчас создавать новые пункты в strings.xml
Давайте просто я напишу по-русски так как я вижу, как я понимаю эти пункты, просто и наглядно.
Большинство людей так и делают, если есть пункт, если есть его айдишник — меняем название и дальше можно будет к нему прицепиться и использовать его для обработчика нажатия на этот пункт.
Как видите, перевод произошел, я не готовил специально тоже иконки, пока оставим как есть, хотя если вы создадите новый пункт, вам можно будет подобрать иконку, картинку либо вообще ее удалить.
Удалив просто строку android icon пропадет картинка хотя в принципе лучше конечно что-то подготовить. Давайте продублируем предыдущий пункт, внесем изменения в его ID.
Сделаем пункт по которому приложение будет закрываться, так как бы любимая кнопка начинающего разработчика это Close и Exit — выход и закрыть.
Я перемещу ее в блок, который видите отделен в отдельном пункте, вот так она выглядит, мы иконку менять не буду, опять же вам уже об этом говорил. Захотите подготовить свой какой-то проект, можете нарисовать свои иконки либо поискать в интернете.
Так мы перезапустим проект, посмотрим, что у нас изменилась, и у нас произошли изменения. Итак проект перезапустился, откроем меню и как видим, добавился наш пункт.
Естественно сейчас он не обрабатывает нажатие на кнопку
Давайте сейчас напишем небольшую процедуру, в которой вместо текста «Hello Word!» будет написано, какая кнопка, какой пункт был нажат.
Файл content_main.xml
Для этого в TextView добавим ID, чтобы можно было к нему обращаться программно, я назову его nav_tv.
В файле MainActivity.java мы объявим переменную TextView tv перед функцией onCreate, также нам нужно будет найти ее через findViewById() и я надеюсь вы уже знаете, как это делается и объяснять вам не надо.
теперь найдем конструкцию onNavigationItemSelected и в конструкцию if..else допишем
и укажем текст который будет появляться в центре нашего приложения по нажатию на кнопку.
Соответственно, для пункта nav_camera, который мы назвали почему-то импорт, потому как на иконке изображен фотоаппарат, мы назовем это действие «Нажата кнопка: Камера», «Нажата кнопка: Галерея»
Здесь может находиться какая либо процедура, то есть необязательно просто вот одно действие, прямое, сразу передать текст куда то туда то и все, то есть здесь можно вызвать, допустим, дополнительную активность, а скорее всего так вы будете делать, если вы этим интересуетесь, либо фрагмент какой-то откроется, либо новая активность.
Потому здесь достаточно богатое поле для деятельности, вспомните хотя бы приложение для aliexpress, сколько там пунктов находится всевозможных: магазин, купите, избранное, поделиться и настройки. Кстати, тут есть — инструменты это в принципе почти как настройки.
Обратите внимание — я добавил функцию finish() , она закроет приложение по нажатию на этот пункт.
Перезапустили проект и теперь как вы видите при нажатии на пункты меню,(исправлю камера на импорт)можно будет видеть, что наше боковое меню реагирует на воздействие нажмем на выход и приложение закрылось.
Сейчас немного займемся настройкой декоративного элемента, который у нас отвечает за рисунок и за градиент.
Градиент в side_nav_bar
В файле side_nav_bar прописан градиент который находится как background возле картинки.
Есть центральный цвет, есть начальный цвет, есть конечный цвет и есть угол на который будет повёрнут градиент.
Я специально не подбирал цвета которые хотел бы поставить сюда ну пока просто в виде эксперимента я вам покажу как это все меняется, как настраивается.
Если вы будете уже серьезно заниматься, разрабатывать свой собственный стиль приложение вы уже конкретно эти шестнадцатеричные цвета подберете, потому как я пока гадаю на кофейной гуще, если можно так выразиться.)))
Так изменим угол 135 градусов на 90, и через некоторое время некоторой задержкой обновляется наш градиент и вот сейчас картинка у нас под наклоном, и соответственно, обновилось приложение, и наше меню, изменился в макете наш градиент.
В принципе, можете подобрать любой переход, от светлого тона к тёмному цвету, либо посередине, чтобы барьер был.
Можно в принципе поиграться с углом наклона, у вас изменится вид этой шапки, или сделать однотонный цвет, допустим красный — red или #FF0000
Необязательно использовать градиент, можно указать начальный и конечный одинаковый цвет.
Давайте перенесем нашу кнопку выход и удалим часть, вот этот блок можно удалить, вместе с разделителем. Вот у нас получится вот такое меню сокращенное. Не обязательно делать либо вы можете добавлять, удалять пункты. Поскольку я удалил часть элементов, то мне нужно подправить код обработчика нажатия на пункты.
Перезапустим наше приложение, обновилось нашими меню, так оно аккуратно, компактно, если у вас пока много пунктов нет – можете ограничиться небольшим списком.
Смотрите видео Android Studio: Как сделать боковое меню с помощью NavigationDrawer:
Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!
Источник