Экран меню для android

Тайны кнопок в Android. Часть 3: Кнопки в главном меню

Главное меню — один из основных инструментов для взаимодействия пользователя с приложением. В Android 2.3.x и раньше оно было «спрятано» на аппаратной кнопке Menu, и разработчики рисовали меню кто как умел. Но начиная с Android 3.0 недоработка была исправлена, меню стало стандартным компонентом на Action Bar, и получило ряд новых возможностей. При этом процесс разработки меню практически не претерпел изменений. Меню в Android — это не просто набор кнопок, на которые можно вешать OnClickListener . В Android с меню можно сделать куда больше, чем кажется на первый взгляд.

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

Вот так по-разному может выглядеть меню одного и того же приложения.

Наша первая кнопка в меню

Меню в Android описываются в файлах ресурсов или формируются программным кодом. Рекомендуется первый вариант по целому ряду причин: скорость разработки, наглядность, простота сопровождения. Ресурсы меню располагаются в подкаталоге menu каталога ресурсов приложения res . Создаем каталог menu , затем создаем новый Android XML File :

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

В открывшемся редакторе введем код первой кнопки нашего меню:

Давайте рассмотрим использованные атрибуты:

  • android:id указываем, чтобы потом в коде отличать одни кнопки от других.
  • android:orderInCategory указывает порядок нашей кнопки относительно других. Указывайте порядок с шагом в 10 или 100, это позволит в будущем добавлять новые элементы в любое место, не перестраивая порядок остальных.
  • android:showAsAction — самый интересный параметр, поскольку именно он управляет поведением элементов меню в разных ситуациях. Он может принимать целый ряд значений:
    • ifRoom — Показывать элемент в action bar, только если для него достаточно места. Если места недостаточно, элемент будет автоматически скрыт в дополнительное меню (то, которое показано тремя точками друг над другом). Это лучший способ кастомизации меню в зависимости от размера экрана устройства. На больших экранах планшетов action bar будет заполнен кнопками, а на небольших телефонах будут показаны самые важные кнопки, в то время как до остальных тоже можно добраться, но только через дополнительное меню. Имейте в виду, что дополнительное меню отображается в action bar только на тех смартфонах, на которых нет аппаратной кнопки меню.
    • withText — Рядом с иконкой кнопки будет показан текст, заданный свойством android:title . Этот параметр можно указывать в комбинации с другими, разделяя параметры знаком |
    • never — Кнопка никогда не будет видна на action bar, даже если для нее есть место. К такой кнопке всегда придется добираться через дополнительное меню.
    • always — Всегда показывать кнопку в action bar. Данным параметром нельзя злоупотреблять, так как на маленьких телефонах кнопки могут начать заползать на другие элементы action bar, например на заголовок приложения. Определите для каждой activity максимум одну самую важную кнопку, без которой никак нельзя, и отметьте always только у нее. Остальные (а по возможности все) должны быть ifRoom .
    • collapseActionView — позволяет сделать кнопку, открывающую или скрывающую дополнительный элемент View в action bar. Например, можно задать такой параметр иконке поиска, по ее клику показывать прямо в action bar поле для ввода поискового запроса.
  • android:title — определяет заголовок кнопки меню. Он может отображаться рядом с иконкой в action bar или же как название элемента в дополнительном меню.
  • android:icon — иконка кнопки.
Читайте также:  Андроид 12 для samsung galaxy s10 plus

Иконки для меню

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

Набор иконок представлен отдельно для темной и отдельно для светлой темы Holo, а также для разных размеров экранов. Если вы не можете позволить себе дизайнера в команде, этот набор просто незаменим.

Подключение меню к Activity

Загрузить меню из ресурса очень быстро. Открываем код Activity и перекрываем метод onCreateOptionsMenu :

Теперь меню отображается, но при нажатии на кнопку ничего не происходит. Повесить обработчик на кнопку можно кодом или прямо в XML-ресурсе, задав в свойстве android:onClick имя метода-обработчика. Чтобы сделать то же самое кодом, нужно в Activity перекрыть метод onOptionsItemSelected :

Создаем подменю

Подменю полезно, когда мы хотим уточнить способ выполнения действия, представленного в action bar. К примеру, у нас есть список покупок и кнопка «Сортировка». По нажатию кнопки нужно выяснить, по какому параметру пользователь хочет отсортировать элементы списка: по категории товара, по названию или по порядку добавления в список. Посмотрим код подменю для такого случая:

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

Radio button’ы в меню

Мы только что сделали меню для выбора порядка сортировки покупок. Было бы здорово показывать, какой способ сортировки используется в текущий момент. Список может быть отсортирован только одним из трех возможных способов, что отлично соответствует идее radio button. Чтобы сделать из нашего подменю набор radio button, достаточно тегу указать свойство android:checkableBehavior=»single» . Возможные значения android:checkableBehavior :

  • single — выбор только одного из доступных элементов, наш случай
  • all — выбор любого количества доступных элементов, аналог check box
  • none — элементы группы являются обычными элементами меню, это значение по умолчанию

Полученный код меню:

Если запустить приложение и попробовать выбрать один из способов сортировки, ничего не произойдет. В меню не показано, что какой-то элемент выбран. Это придется сделать вручную вызовом item.setChecked(true);

Скрываем или показываем элементы меню

Скрывать элементы меню полезно, если телефон временно или в принципе не может выполнить какой-либо функционал. Например, у нас есть кнопки для отправки списка покупок через соц. сети, но если интернет сейчас не подключен, то отправить список не получится. Чтобы не расстраивать пользователя сообщениями об ошибке, можно скрыть неработающие в данный момент кнопки. Давайте добавим кнопку «Поделиться»:

Читайте также:  Зависание смартфона андроид причины

Теперь во время создания меню в методе onCreateOptionsMenu проверим доступность сети, найдем нашу кнопку и установим ей видимость:

Так мы подстраиваем меню в момент создания activity. Этого достаточно для тех функций, которые требуют наличия определенного аппаратного обеспечения в телефоне (камера и т.п.). Но интернет может включиться в любое время, даже после старта activity. Также иногда возникает желание перестроить меню после каких-то действий пользователя в приложении. Перестроить меню предельно просто. Вызываем метод invalidateOptionsMenu() нашей activity. Это приведет к повторному вызову метода onCreateOptionsMenu перед следующей отрисовкой меню. Обратите внимание, что метод invalidateOptionsMenu был добавлен в API 11, поэтому для совместимости с Android 2.x нужно использовать такой вызов:

Класс android.support.v4.app.ActivityCompat можно найти в Support Package.

Другие способы кастомизации меню

Как вы знаете, в Android можно задавать разные ресурсы для различных размеров/ориентации/плотности экрана и в зависимости от других особенностей устройств. Это касается любых типов ресурсов, в том числе и меню. По умолчанию ресурсы меню загружаются из каталога /res/menu. Но вы можете создать каталог, например, /res/menu-sw600dp, и таким образом задать особую компоновку меню для устройств с минимальным размером экрана 600 dp по горизонтали или вертикали (это как правило соответствует 7-ми дюймовым планшетам). На практике для меню обычно достаточно указания свойства android:showAsAction=»ifRoom» для элементов, так как в результате мы получаем максимально точную «подгонку» меню к тому устройству, на котором будет работать приложение. К тому же это позволяет сильно уменьшить объем кода ресурсов, ведь их в этом случае не нужно дублировать.

Если у вас остались вопросы по работе с главным меню, буду рад ответить в комментариях.

Источник

10 лучших лаунчеров для Android: от простых до многофункциональных

Рано или поздно в жизни каждого владельца Android-смартфона наступает момент, когда хочется максимально кастомизировать своё устройство и радикально изменить интерфейс. Благо, «зелёный робот» позволяет это сделать даже без рут-прав. Смена стокового лаунчера способна перевернуть представление о взаимодействии с девайсом. Я собрал самые интересные и гибкие экраны запуска приложений в этой статье — вы найдёте лаунчер на любой вкус.

Lawnchair

  • русский язык: есть.

Lawnchair — это современный лаунчер с фирменным дизайном смартфонов Google Pixel. Имеет разнообразные функции для кастомизации рабочего стола: смена формы и размера иконок, настройка цвета и прозрачности док-панели, выбор шрифтов, особенные жесты, группировка приложений, переходы между рабочими столами. Это лишь малая часть того, что предоставляет Lawnchair. Немаловажную роль играет возможность создания бэкапов и восстановления из них: легко переносить все установки с одного смартфона на другой. Хотя обновления для лаунчера не выходили уже 2 года, разработчики недавно объявили о возрождении проекта, так что скоро он станет ещё стабильнее и удобнее.

Launcher 10

  • русский язык: нет.

Фанаты Windows Phone могут точно сымитировать дизайн мобильной ОС от Microsoft на Android-девайсе благодаря Launcher 10. Приложение позволяет менять цвет и размер плиток, устанавливать сторонние наборы иконок, выбирать тёмную или светлую тему и даже настраивать анимации открытия приложений. Живые плитки здесь имеются, как и в оригинале. При этом никуда не делись стандартные виджеты, доступные на любых других оболочках.

Читайте также:  Arduino uno car bluetooth shield android motor shield l293d camera объезд препятствие

Microsoft Launcher

  • русский язык: есть.

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

Nova Launcher

  • русский язык: есть.

Лаунчер, заслуживший свою популярность широкими возможностями кастомизации — здесь меняется почти каждый элемент. Удивительно, что, несмотря на свои годы, он активно «допиливается» разработчиками и регулярно получает новый функционал. Ставший классикой быстрый и красивый рабочий стол предоставляет пользователю настройку переходов, гибкую сетку приложений, глубокую кастомизацию иконок, жесты и резервное копирование.

No Launcher

  • русский язык: нет.

Легковесный лаунчер размером всего в 21 КБ, который полностью оправдывает своё название. Здесь нет вообще ничего, кроме списка установленных приложений и поиска по ним. Подойдёт для слабых девайсов и аскетичных пользователей.

Niagara Launcher

  • русский язык: есть.

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

POCO Launcher

  • русский язык: есть.

Лаунчер из смартфонов Pocophone обладает знакомым по девайсам от Xiaomi интерфейсом и гибкими настройками. Его интересная особенность — автоматическое распределение приложений по категориям. Отдельно программы сортируются по цветам иконок, впрочем, это можно отключить. Кроме этого, есть функционал скрытия программ, смены сетки рабочего стола, темы и иконок.

Smart Launcher

  • русский язык: есть.

Очень функциональная, но простая с виду оболочка Smart Launcher содержит массу настроек внешнего вида. Здесь есть подстраивающаяся под обои тема, адаптивные иконки, собственные шрифты, автоматическая сортировка приложений по категориям. Отдельные приложения можно спрятать в папку с паролем. Поддерживаются собственные жесты: блокировка двойным тапом или шторка уведомлений свайпом вниз. Виджетам выделен специальный экран справа от главного рабочего стола.

Linux CLI Luncher

  • русский язык: нет.

Лёгкий лаунчер наверняка понравится техногикам за счёт интерфейса в стиле Linux-терминала. В самом верху постоянно находится информация о состоянии девайса: его кодовое имя, уровень заряда, количество свободной памяти в ОЗУ и хранилище, а также дата. Запускаются приложения путём набора названия. Появляются подсказки, тапнув по которым открываются нужные программы. Есть небольшой набор дополнительных команд, с помощью которых можно быстро изменить системные параметры вроде громкости или яркости.

Rootless Pixel Launcher

  • русский язык: есть.

Стандартный лаунчер со смартфонов Google Pixel, но с возможностью менять набор иконок и их форму. От более продвинутого Lawnchair отличается, в первую очередь, меньшим весом — 3 МБ против 20 МБ. Подойдёт для тех, кому не нужны все те настройки кастомизации, которые предлагают аналоги.

Источник

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