- Тайны кнопок в Android. Часть 3: Кнопки в главном меню
- Наша первая кнопка в меню
- Иконки для меню
- Подключение меню к Activity
- Создаем подменю
- Radio button’ы в меню
- Скрываем или показываем элементы меню
- Другие способы кастомизации меню
- Как включить или убрать интерактивные кнопки с экрана Android
- Что такое виртуальные кнопки на смартфоне
- Отличие от физических клавиш управления смартфоном
- Как подключить виртуальные кнопки
- Как включить кнопку «Домой» и другие навигационные клавиши на Android средствами системы
- Как вернуть кнопку «Домой» на Android с использованием приложений
- Как вернуть пропавшие элементы навигации после обновления прошивки
- Как убрать кнопку «Home» с экрана Android
- Дополнительные возможности кнопки «Home»
Тайны кнопок в 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 — иконка кнопки.
Иконки для меню
Если вы разрабатываете приложение в стиле 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» для элементов, так как в результате мы получаем максимально точную «подгонку» меню к тому устройству, на котором будет работать приложение. К тому же это позволяет сильно уменьшить объем кода ресурсов, ведь их в этом случае не нужно дублировать.
Если у вас остались вопросы по работе с главным меню, буду рад ответить в комментариях.
Источник
Как включить или убрать интерактивные кнопки с экрана Android
Мобильная операционная система Android больше всего ценится пользователями за удобство работы и гибкость, благодаря которой платформу можно полностью адаптировать под собственные потребности. При этом многие даже не догадываются обо всех возможностях, предлагаемых ОС. Например, интерактивная кнопка Home выполняет не только функцию возврата в главное меню, для чего в основном и применяется, её можно задействовать и под другие задачи.
Некоторые пользователи встречаются с проблемой, когда виртуальные кнопки, располагающиеся на экране устройства, пропадают, что чаще всего случается в результате падения девайса или других механических воздействий, но может быть и следствием программных неисправностей, например, установки неподходящей либо нестабильной прошивкой. В таких ситуациях стоит задача возвращения интерактивных кнопок на экран. В других же случаях наоборот, проблемой становится именно их наличие, поскольку под них отводится немало места на дисплее, что может не устроить владельцев смартфонов с небольшим экраном, с этим обычно связано стремление избавиться от кнопок.
Рассмотрим, как вернуть кнопки на экран или убрать их, а также расскажем о возможностях кнопки «Home», о которых вы могли не знать.
Что такое виртуальные кнопки на смартфоне
Программные кнопки, являющие собой интерактивные элементы, располагаются на экране устройства или под ним на дополнительной сенсорной панели и управляются нажатием пальца. Реализация разработчиками в пользовательском интерфейсе виртуальных клавиш позволяет отправлять определённые команды системе в одно касание. Так, сенсорные кнопки функционально способны полностью заменить механические.
Отличие от физических клавиш управления смартфоном
Управление девайсом осуществляется за счёт механических и программных элементов. Что касается первых, то на корпусе мобильных девайсов – это кнопка питания, качающаяся клавиша громкости, реже можно встретить реализованную таким способом клавишу «Home». Программных клавиш обычно три:
- «Домой» – позволяет вернуться в основное меню или на главный экран, при этом ранее открытое приложение остаётся в памяти девайса и продолжает работу в фоне, а также выполняет ряд других опций (об этом ниже).
- «Назад» – клавиша возвращает на предыдущую страницу, путём последовательных нажатий позволяет вернуться на несколько предыдущих экранов и закрыть приложение, причём софт в этом случае выгружается из оперативной памяти.
- «Последние приложения» – удобно использовать клавишу в случае необходимости быстро перейти к используемым в недавнем времени приложениям.
В некоторых моделях реализовано не три, а две программные кнопки, в других третья клавиша служит для вызова контекстного меню или же с этой целью применяется четвёртая кнопка.
Чаще всего смартфоны оснащаются тремя сенсорными кнопками, которые располагаются прямо на экране или же на сенсорной панели. Вариант с изменяемыми наэкранными клавишами удобен не только управлением, а и возможностью настройки (изменения их расположения, удаления, добавления новых). Сенсорная панель под экраном, также характерная для многих моделей устройств, не крадёт пространство дисплея, при этом возможность настроек данной схемы в большинстве устройств отсутствует.
Встречается также симбиоз программных клавиш и центральной аппаратной кнопки, на которую в новых моделях добавляют также сканер отпечатка (такое решение реализовано производителем Самсунг). Она же позволяет разблокировать устройство, не прибегая к кнопке питания. На более редких экземплярах смартфонов могут встречаться и другие вариации исполнения.
Сказать однозначно, какое решение будет лучшим, виртуальные или физические кнопки, нельзя, поскольку это скорее вопрос удобства и здесь всё индивидуально.
Настойка кнопок «Домой» и «Назад»
Как подключить виртуальные кнопки
Если клавиши были просто скрыты, что выполняется в настройках устройства, то для их возвращения идём в «Настройки» – «Панель навигации» в разделе «Система» и напротив пункта «Скрыть панель навигации» перемещаем тумблер в неактивное положение. На разных моделях девайсов меню может отличаться, например, чтобы в смартфоне Xiaomi заменить экранные кнопки управлением жестами, нужно перейти в «Настройки» – «Безграничный экран» в блоке «Система и устройство». А для возвращения виртуальных клавиш здесь же в меню нужно выбрать «Кнопки навигации» и они появятся на экране.
В настройках смартфона можно найти и другое решение, например, у смартфонов Xiaomi есть встроенный сенсорный помощник в расширенных настройках, который при необходимости может заменить неработающие элементы навигации.
Виртуальные кнопки могут пропасть в результате обновления прошивки или по другим программным либо аппаратным причинам. Их можно снова вывести на экран и есть несколько способов это сделать с root-правами и без. Некоторые кастомные версии Android позволяют включить навигационную панель через настройки, в других можно модифицировать framework-res.apk из папки system\ framework.
Настройка кнопок в программе Button Mapper
Как включить кнопку «Домой» и другие навигационные клавиши на Android средствами системы
Данный способ подразумевает наличие root-прав на устройстве. В операционной системе Android имеется отладочная переменная qemu.hw.mainkeys, при помощи которой можно управлять видимостью клавиш навигации на экране.
Чтобы включить кнопки, выполняем следующие действия:
- Открываем файловый менеджер Root Explorer и активируем в нём показ скрытых элементов.
- В папке System открываем через текстовый редактор файл build.prop.
- В последней строке выставляем qemu.hw.mainkeys=0 (запись переменной со значением «0» подразумевает показ кнопок на экране, при значении «1» они уберутся).
- Перезагружаем устройство, после чего в нижней части экрана появится активная полоска с клавишами навигации.
Как вернуть кнопку «Домой» на Android с использованием приложений
Существует множество программных решений для возврата и настройки виртуальных кнопок, многие из которых можно найти в магазине приложений Google Play. В большинстве случаев специализированному софту понадобится предоставить root-доступ, но есть и те, что не требуют наличия root.
Среди приложений, используемых с целью возврата и настройки виртуальных клавиш, популярностью пользуются Assistive Touch, Navigation bar, Full Screen Toggle, Back Button (No root) и прочие продуты. Устанавливается такой софт стандартным способом из Google Play или из других надёжных источников в формате APK. Обычно ПО данной категории обладает достаточно широким функционалом и позволяет не только включить/выключить навигационную панель или отдельные кнопки, но и выполнить настройку, сменить темы оформления, получить плавающую «Home» и т. д.
Опытные пользователи могут также установить Xposed Framework (ввиду взаимодействия софта с системой на глубоком уровне, его использование без соответствующих знаний и навыков не рекомендуется, поскольку может привести к серьёзным последствиям для устройства), в нём есть модуль включения виртуальных кнопок.
Как вернуть пропавшие элементы навигации после обновления прошивки
Пользователи сталкивались с исчезновением кнопки «Домой» и других элементов навигации, в том числе и шторки уведомлений, после обновления Android. Способ исправления бага предполагает использование компьютера с установленными USB-драйверами и Android SDK (нам потребуется программа ADB). Выполняем следующие шаги:
- Посредством USB-соединения обеспечиваем подключение Android-устройства к ПК или ноутбуку.
- Запускаем окно командной строки и прописываем здесь команду adb shell am start -n com.google.android.setupwizard/.SetupWizardTestActivity.
- В результате на экране мобильного девайса появится окно первого запуска. Пользователю будет предложено выбрать язык и присоединиться Google Now. Далее появится рабочий стол.
- Перезагружаем устройство. Исчезнувшие инструменты навигации вернутся на место.
Изменение кнопок через программу Swipe Home Button
Как убрать кнопку «Home» с экрана Android
В смартфонах Honor и Huawei настройки позволяют скрывать интерактивную кнопку «Home», для чего нужно выполнить следующее:
- Идём по пути «Настройки» – «Система» – «Системная навигация».
- Открываем настройки навигационной кнопки.
- Теперь нужно перевести тумблер в неактивное положение, после чего «Home» на экране Android-устройства уже не будет. Чтобы вернуть интерактивный элемент, нужно проследовать тем же путём и перевести ползунок в положение включения.
Кнопка «Домой» может быть деактивирована из панели быстрых настроек, для чего свайпом сверху открываем шторку, находим здесь иконку «Кнопка навигации» и нажимаем, после чего значок изменит цвет.
Элемент навигации «Home», расположенный вместе с другими интерактивными клавишами, можно скрыть с экрана Android, используя системные настройки девайса. Один и вариантов, как убрать «Домой», предполагает следующие действия:
- Идём в «Настройки» – «Расширенные настройки».
- На вкладке «Кнопки и жесты» напротив пункта «Скрыть экранные кнопки» перемещаем тумблер в неактивное положение.
В зависимости от оболочки меню отличается, на некоторых девайсах в настройках нужно перейти в раздел «Панель навигации» и аналогичным образом перевести ползунок в соответствующем пункте.
Альтернативный вариант, позволяющий отключить кнопку «Home» на Android и/или соседствующие элементов встроенной навигации – применение Xposed Framework.
Дополнительные возможности кнопки «Home»
Наиболее часто «Домой», как и следует из названия клавиши, используется для возврата в основное меню или на главный экран, но она способна и на другие действия:
- Длительное нажатие может вызывать поиск Google или голосового помощника с новостной лентой (работает на большинстве устройств под управлением Android).
- Двойным нажатием по клавише «Home» вызывается список запущенных приложений, действие также позволяет увидеть пять часто используемых программ (работает преимущественно на Google Pixel).
- Если нажать на «Home» и быстро провести в сторону клавиши «Назад», появится возможность переключаться между последними открытыми программами (работает на девайсах Самсунг).
- Для быстрого переключения между двумя последними программами «Home» нужно зажать и быстро провести вправо или влево.
Кроме того, посредством сторонних приложений есть возможность настроить кнопку «Домой» на Android на выполнение других задач. Например, можно воспользоваться софтом «Переназначение клавиш», для использования большинства опций root-права не требуются.
Источник