Ahpub - Компьютер Шаг за Шагом

Как сделать меню на андроиде. Инженерное меню на Андроид – разбираемся в деталях. Коды сервиса аппаратов на Андроид

Обновленная версия Android 5 Lollipop, хотя и похожа на предыдущий KitKat, однако имеет некоторые отличия, которые могут показаться непривычными и неудобными. Настроек в “Леденце” много.

Одни из них (типа контрастного текста или инвертирования цветов) нужны немногим, другие же необходимы практически каждому. Рассмотрим вопрос, как настроить Андроид 5, более детально.

Заводские настройки Android Lollipop

Одна из самых важных Android 5 настроек – Factory Reset Protection («Защита фабричных настроек»). Активация этой опции приведет к тому, что сбросить настройки до заводских будет нельзя без логина и пароля к вашей учетной записи в Google.

Благодаря сервису Android Device Manager владелец потерянного или украденного смартфона сможет удаленно заблокировать и очистить устройство.

Необходимо помнить, что защита работает, только когда смартфон заперт экраном активации.

Восстановление данных после установки обновления Андроид

Еще одна полезная опция - возможность восстановления данных после установки Android 5.0 Lollipop. При первоначальной настройке будут предложены различные варианты восстановления данных вплоть до пропущенных звонков.

Андроид 5 настройка учетных записей

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

Доступны 3 типа учётных записей:

  • Учетная запись «Гость» (Guest) обладает минимальными правами. Любая его информация хранится лишь временно. Каждый раз при входе под учеткой гостя система будет спрашивать, хочет пользователь начать работу заново или продолжит последнюю гостевую сессию.
  • «Профиль» (Profile) позволяет настроить доступ к программам и сервисам.
  • «Пользователь» (User) - он же хозяин устройства. Эта учетная запись обладает наибольшими правами. Любое изменение в настройках системы, такое как добавление сети Wi-Fi , будет применяться ко всем другим аккаунтам на устройстве.

Как добавлять пользователей? Очень просто - заходим в настройки и ищем надпись “Пользователи” (Users).

Изначально вы увидите профиль владельца смартфона и гостевой. Также можно добавить пользователей.

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

Ограничение доступа на Андроид 5 Lollipop

Еще одна полезная функция – так называемая «Кнопка». Если вы даете кому-то свой смартфон и не хотите, чтобы в нем рылись или что-то меняли, используйте «Кнопку». Она ограничит функциональность устройства только одним приложением – тем, на котором установлена. Ко всему другому доступ будет запрещен: «Введите пароль».

Как это сделать? Откройте настройки и выберите опцию “Безопасность”. Нажмите на нее. В открывшемся списке нажмите “Закрепление экрана” (Screen pinning). Затем переключите тумблер в положение “Вкл.” (On).

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

Для выхода из закрепленного приложения нажмите и удерживайте кнопки “Обзор” и “Назад”. Через несколько секунд вы попадете на рабочий стол.

Как настроить прерывания в Андроид 5

Помимо всего прочего, настраивать в Android 5.0 Lollipop можно так называемые «Прерывания» - вы сможете сами определить, какие контакты или приложения смогут вам звонить или посылать уведомления.

Как настроить прерывания? Зайдите в настройки, выберите “Звуки и уведомления” (Sound & notification) и тапните по этой опции. Ниже ползунков настройки звуков будет опция “Прерывания” (Interruptions) - нажмите на нее.

Можно разрешить беспокоить вас только избранным контактам или приложениям. В Lollipop имеется возможность включения режима «Важные» по заданному вами расписанию - для этого есть специальная опция “Расписание режима “Только важные оповещения” (Downtime (priority interruptions only).

Можно быстро менять режимы приоритета, просто коснувшись ползунка громкости. Под ним будут доступны режимы “Не беспокоить” (None), “Важные” (Priority) и “Все” (All).

Первые два режима можно включить бессрочно или на определенное время. Кнопки “+” и “-” позволяют регулировать интервал времени, в течение которого выбранный режим будет действовать. Временной промежуток может регулироваться от 15 минут до 8 часов.

Настройка Lollipop блокировки экрана и уведомлений

В Android 5.0 Lollipop входящие уведомления высвечиваются на экране блокировки. Это не всегда удобно. Вряд ли кому-то хочется “светить” информацию личного характера. Для этого случая есть гибкая настройка в Андроид 5 способа вывода уведомлений.

Чтобы это сделать, зайдите в Настройки -> Звук и уведомления -> На заблокированном экране -> Скрыть личную информацию. После этого посторонние глаза ее не увидят.

Почта в Андроид 5 стала удобнее

Почтовое приложение Gmail, помимо нового дизайна, получило поддержку учетных записей на других почтовых сервисах, поддерживающих протоколы IMAP и POP. Теперь не нужно залезать в браузер, чтобы открыть негугловский «ящик» – все можно будет сделать из одного приложения.

Android 5 настройка экономии батареи

Если вы хотите, чтобы смартфон работал дольше на одной зарядке, следует узнать, как настроить в Андроид 5 режим экономии батареи Project Volta. По словам разработчиков, он позволяет продлить время работы на 15-20%. Правда, при этом устройство начинает заметно «тормозить».

Для того чтобы включить этот режим, войдите в настройки, нажмите на «Батарея», затем на кнопку меню (три точки в правом верхнем углу) и выберите режим экономии батареи:

Когда режим экономии батареи включится, навигационная и статусная панели смартфона станут оранжевого цвета и появится сообщение о включении режима экономии:

Если захотите, то этот режим можно сразу же выключить - в появившемся сообщении есть такая возможность.

Настройка в Андроид 5 функции Switch Access

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

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

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

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

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


Выбираем тип ресурса Menu , вводим имя файла. Так как в разных , скорее всего, будет разным, рекомендую привязывать имена файлов ресурсов меню к именам 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:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.your_activity_menu, menu); return true; }
Теперь меню отображается, но при нажатии на кнопку ничего не происходит. Повесить обработчик на кнопку можно кодом или прямо в XML-ресурсе, задав в свойстве android:onClick имя метода-обработчика. Чтобы сделать то же самое кодом, нужно в Activity перекрыть метод onOptionsItemSelected:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuPurchasesListNewRecord: // TODO: обработчик нажатия здесь return true; } return super.onOptionsItemSelected(item); }

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

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

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

Radio button"ы в меню

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

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

Если запустить приложение и попробовать выбрать один из способов сортировки, ничего не произойдет. В меню не показано, что какой-то элемент выбран. Это придется сделать вручную вызовом item.setChecked(true);
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuPurchasesListNewRecord: // TODO: обработчик нажатия здесь return true; case R.id.menuPurchasesListSortOrderCategory: item.setChecked(true); return true; case R.id.menuPurchasesListSortOrderName: item.setChecked(true); return true; case R.id.menuPurchasesListSortOrderAddTime: item.setChecked(true); return true; } return super.onOptionsItemSelected(item); }

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

Android поддерживает несколько типов меню. Первый - на телефоне есть отдельная кнопка Menu (в старых телефонах), нажатие которой вызывает меню. В новых устройствах отдельную кнопку убрали, заменив на значок меню в виде трёх точек в вертикальной ориентации. Второй тип - контекстное меню , которое появляется при нажатии и удерживания пальца на экране в нужном месте (также можно нажать и удерживать центральную кнопку на телефоне). Контекстное меню в свою очередь может иметь подменю. Сегодня мы познакомимся с первым типом меню. В данной статье будет рассматриваться работа с меню на новых устройствах под управлением Android 4.0 и выше.

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

Создайте новый проект на основе Empty Activity и запустите его. Никакого меню пока нет.

Создадим несколько строковых ресурсов в файле res/values/strings.xml , которые будут отвечать за пункты меню:

Settings Кот Кошка Котёнок

Настройки

В приложение Настройки можно попасть: нажав на иконку в меню приложений (или на рабочем столе) или через значок в панели переключателей. Основной экран приложения разделен на две вкладки ВСЕ и ПОДДЕРЖКА, в последней можно обнаружить две ссылки: Справочный центр / Оставить отзыв и Рекомендации и полезные советы . В некоторых странах во вкладке поддержка можно получить помощь и задать вопрос живому человеку в чате. Все настройки смартфона собраны в 4 группы: Беспроводные сети , Устройство, Личные данные и Система; и разбиты на 22 раздела. В верхней части закреплен 5-я группа которая называется Подсказки, здесь появляются интерактивные советы по настройке системы. Еще одно нововведение заключается в наличии кнопки Справка/отзыв во всех разделах/настройках. Во всех экранах Настроек кроме главного есть боковое меню для быстрого перехода в другие разделы.

Базовые приложения

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

Контакты – это приложение для работы с контактами пользователя. По функциональности оно мало чем отличается от вкладки Контакты в приложении Телефон.

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

Gmail – это приложение для работы с электронной почтой по умолчанию начиная с пятой версии Android. В него можно добавлять почтовые ящики не только от Google, но и от других почтовых сервисов. На основном экране отображается список писем и кнопки поиска и создания нового сообщения. Свайпом от левой края экрана вызывается боковая панель, которая содержит список папок и ярлык настроек.

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

Часы – включает в себя следующие функции: будильник, мировое время, таймер и секундомер;

Камера . На основном экране расположен видоискатель и кнопки: спуска затвора, переключения на фронтальную камеру, галереи, включения таймера, активации вспышки, переключений режима HDR+, включения сетки, выбора пресета баланса белого и Дополнительно. Переключение между режимами съемки фото и видео производится свайпом в сторону. Кроме основного режима съемки есть еще четыре: Замедленная съемка – позволяет снимать с четырехкратным или восьмикратным замедлением; Панорама – позволяет создавать панорамные фотографии с углом обзора до 360°; Photo Sphere – создание фотосферы; Размытие – позволяет создавать фотографии с искусственным эффектом боке.

Фото – это приложение выполняет роль системной галереи и одновременно с этим является клиентом одноименного сервиса от Google.

Календарь – основным представлением приложения является Расписание, где все события идут одним списком, что интересно: начало каждого месяца в этом списке озаглавлено симпатичной картинкой отражающей основную суть этого месяца. Чтобы посмотреть на месяц, нужно тапнуть на названием текущего месяца в заголовке. Представление можно сменить на День, 3 дня, Неделя и Месяц. В правом нижнем углу отображается кнопка добавления события.

Калькулятор – обладает стандартной и расширенной функциональностью. В портретной ориентации панель с дополнительными функциями (sin, cos, tan, ln и т.д.) вызывается свайпом от правого края экрана, в альбомной же ориентации эта панель видна всегда.

Карты – это приложение-клиент для Карт Google. Основной экран содержит строку поиска и кнопки: кнопка вызова бокового меню, кнопка голосового поиска, кнопка ориентации на север, кнопка определения текущего местоположения и кнопка создания маршрута. В боковом меню можно сохранить выбранный участок карты в память телефона для дальнейшего пользования приложением в оффлайн режиме. В разделе “Хронология” ведется журнал перемещений пользователя. Раздел “Ваши впечатления” содержит отзывы о публичных местах: ресторанах, торговых центрах, салонах красоты и т.д.

Загрузки – простейший менеджер загрузок.

Фирменные приложения

Play Маркет – это клиент магазина приложений и основное фирменное приложение от Google. Посредством него производится покупка, установка и обновление сторонних приложений. Раздел “Игры и приложения” представляет собой виртуальную витрину, где отображаются различные подборки товара, например, Новинки или Самые популярные игры, в виде миниатюр приложений возглавляющих соответствующую подборку и ссылки на весь список. Раздел “Фильмы, музыка, книги” это тоже виртуальная витрина, но на ней представлен соответствующий контент и пресса также в виде подборок и банеров. Раздел “Мои приложения и игры” для удобства пользователя состоит из двух списков: Установленные и Все. Раздел “Список желаний” показывает все товары когда либо отмеченные пользователем как желаемые.

Play Игры – это приложение клиент одноименного сервиса. Раздел “Главная” отображает основные данные о пользователе: имя, уровень, сколько очков опыта нужно набрать для перехода на следующий уровень. Ниже отображаются списки игр: рекомендованные игры, игры в которые играет пользователь и во что играют друзья. Раздел “Мои игры” содержит три вкладки: последние, все и установленные. Раздел “Уведомления” в трех вкладках отображает список приглашений, список подарков и запросов, и список квестов. Раздел “Игроки” в двух вкладках отображает список Добавленных игроков и список Рекомендуемых – друзей друзей. Раздел “Найти игры” так же содержит три вкладки: Рекомендуем, Популярные и Сетевые игры.

Play Музыка – это музыкальный плеер и, одновременно, клиент одноименного облачного музыкального сервиса. Раздел “Главная” отображает список последних действий пользователя: прослушанные или купленные треки. Раздел “Фонотека” отображает все треки пользователя, купленные или закаченные им с компьютера, сортирую во вкладках по плейлисту, исполнителю, альбому или жанру. Присутствует интересная функция “Автомиксы”, она значительно упрощает создание плейлистов из большого количества треков, для создания автомикса достаточно указать имя исполнителя, альбома или жанра, и приложение само создаст новый плейлист. В боковом меню так же присутствует ссылка на Play Маркет, т.к. покупка треков производится только из него. Теперь в настройках есть эквалайзер.

Play Фильмы – это клиент сервиса для покупки/проката фильмов и просмотра на мобильном устройстве . Раздел “Главная” отображает фильмы, сериалы и мультфильмы собранные в плейлисты по жанрам и популярности. Раздел “Библиотека” отображает список купленных или взятых в прокат пользователем фильмов. В боковом меню присутствуют ссылка на Play Маркет.

YouTube – это клиент одноименного сервиса. Основной экран разделен на четыре вкладки: Главная, В тренде, Подписки и Аккаунт. Последняя вкладка содержит разделы: Просмотренные, Мои видео, Оповещения, Покупки и Посмотреть позже; а так же список плейлистов. Окно просмотра ролика удобное и функциональное, но имеет одну неприятную особенность: при открытии ролика начинается его автоматическая загрузка, даже если устройство для доступа к интернет использует мобильную сеть . Поэтому если вы открыли видео не для его просмотра, а, например, для просмотра описания или комментариев, приготовьтесь расстаться с несколькими десятками (сотнями?) мегабайт трафика.

Диск – это приложение для работы с сервисом облачного хранения данных Google Диск. Основной экран отображает корневую директорию хранилища пользователя и список недавно открытых файлов . Раздел “Доступные мне” отображает список файлов других пользователей, к которым открыт доступ. Кроме этого есть разделы: Google Фото, Недавние, Помеченные, Офлайн-доступ и Загруженные. В боковой панели снизу показывается какой объем дискового пространства занят и сколько всего доступно пользователю.

Последние несколько лет Apple и Google последовательно двигают свои операционные системы навстречу друг другу, если быть точным, пытаются зайти друг к другу во фланг. Apple с каждой версией iOS расширяет функциональность и пытается сделать систему более гибкой для пользователя и приложений. Google же пытается исправить традиционные слабые : привести наконец в порядок работу с уведомлениями, сделать единообразным и более выверенным и побороть утечку заряда аккумулятора. И они, надо сказать, двигаются в правильном направлении, жаль что иногда черезчур медленно.

В Android 7.1 лично меня подкупают: более дружелюбные в сравнение с iOS механика многозадачности и работа с несколькими приложениями; гибкость в выборе инструментов для решения тех или иных задач; глубокая интеграция с сервисами Google, которыми я активно пользуюсь; более стройный и логичный пользовательский интерфейс. Нельзя не заметить как Google подчистил список предустановленных приложений избавив пользователя от хлама. Не устраивает меня: сохранившийся дренаж заряда батареи; разнобой в UI подавляющего числа приложений и менее эффективное использование поверхности экрана. Систему, не смотря на постоянные улучшения, до сих пор нельзя назвать полностью безопасной, общая оптимизация в iOS по прежнему лучше. Подводя итог, можно однозначно утверждать, что Android до пятой версии и сейчас это практически две разные системы, радует, что Google нащупали правильное направление и медленно и верно двигаются по нему.

Появилась благодаря добавленному в Android 6.0 инструменту System UI Tuner. Это экспериментальная функция. Чтобы включить её, нужно развернуть панель быстрых настроек и несколько секунд удерживать палец на шестерёнке в правом верхнем углу. После этого система сообщит о включении System UI Tuner, а в настройках появится соответствующий пункт.

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

Хотя сообщение об ошибке появилось довольно часто, что приложение не ответило, однако, этого достаточно, чтобы нажать «Подождите», и приложение сразу же стало функционировать. Проблемы - это проблема, когда компьютер переходит в режим ожидания, когда он находится в режиме ожидания.

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

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


Создание и добавление собственных элементов возможно через приложение Custom Quick Settings .

Сначала пользователю покажут процесс активации System UI Tuner, а затем предложат создать собственный элемент панели.

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

Загрузить: Набор значков панели действий

Атрибуту значка должен быть присвоен идентификатор объекта изображения. Об этом мы уже говорили в уроке «Создание простого пользовательского интерфейса».

Кнопка «Вверх» в действиях низкого уровня

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


Процесс пошагово описан непосредственно на экране Custom Quick Settings. Попробуем пройти его, создав на панели, например, значок для запуска мобильного приложения Лайфхакера.

Вот пример декларации о превосходстве в манифесте. Чтобы удалить указанный маршрут, нажмите кнопку «Маршрут» на экране навигации. Появится экран точек маршрута. Теперь нажмите на эти 3 точки в правом нижнем углу экрана, а затем вы увидите несколько вариантов, в том числе «Удалить» - нажав на нее, вы можете удалить маршрут.

Как назначить маршрут, указывающий на карту? Для этого вам нужно нажать на точку, но не удаляйте палец, просто удерживайте ее некоторое время, пока не появится соответствующий экран. Как добавить пункт к своему любимому, указывающему его на карте? Мы делаем то же, что и в вопросе 2, только из появившегося меню мы выбираем «Добавить в избранное».


Тапаем по SYSTEM UI TUNER. Появляется конструктор панели быстрых настроек. На этом этапе можно задать расположение каждого элемента, а также выбрать опцию «Добавить кнопку быстрого доступа» в нижней части экрана. Создаём новую кнопку.

Как отключить его, чтобы иметь плоскую карту? Держите колесо пальцем, а затем правая сторона экрана сможет регулировать высоту контуров здания. Мы сдвигаем ползунок вниз, устанавливая высоту на 0%, и поэтому трехмерные контуры больше не отображаются. Мы можем добавить их, нажав кнопку «Маршрут» - между началом и целью будет подходящее место для клика.

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


Тапаем по «Кнопка трансляции» и задаём ей имя. По инструкции каждая создаваемая кнопка должна иметь название в формате CUSTOMTILEx, где x - это порядковый номер кнопки, которую вы создаёте. Отсчёт начинается с нуля, а потому первая создаваемая кнопка должна называться CUSTOMTILE0.

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

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


Кнопка появится на экране конструктора панели. Попутно вы можете задать её расположение.

Возвращаемся в приложении Custom Quick Settings на экран инструкции, устанавливаем галочку в пункте «I have done this» и нажимаем на Continue.

Мы не хотели сэкономить несколько сотен метров по дороге, чтобы сэкономить минуту или две. Чтобы изменить это, нажмите кнопку «Настройки», затем вкладку «Маршрут». Существует также опция «Навигация в сне». Этот вариант может быть полезен, например, на велосипеде или в походе. Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать их в комментариях.

Петр Суровецкий

Все права сохранены. Как отключить номера домов в автомате? Есть ли способ добраться до андроида на маршруте? Самый быстрый маршрут - самый короткий маршрут - расскажите о дорогах, где вы можете это сделать? После того, как вы определили свой маршрут, вам нужно нажать кнопку «Маршрут» в нижней части экрана. Если в нижней части экрана нет кнопки «Маршрут», вам нужно щелкнуть три точки в правом нижнем углу экрана и появится кнопка «Маршрут». И что мне делать, чтобы отключить весь автомат? На моем устройстве нет отдельной кнопки возврата где-то под экраном, как на телефонах.


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


У меня есть только то, что на экране. Есть ли скрытые «близкие», «конечные» или «выключенные»? Мы еще не видели отдельную кнопку «Закрыть». Вот что мы знаем об этом. Жалость от создателя не думала вводить поиск сохраненных точек. То же самое относится к тем котам, которые отмечают места, где они были сохранены.

Кто-нибудь знает, как восстановить этот нижний луч? Но нет толстого луча с вариантами для всей карты. Просто нажмите его еще раз. В середине у меня есть кнопка главного меню. С правой стороны у меня стрелки, а один - влево. Это невозможно сделать по телефону. Что делать в этой ситуации, потому что очень замусоренный образ авто карты.

Выбираем иконку. Их здесь много, очень много. Лайфхакер очень полезный, как морковка, а потому значок морковки будет в тему.


Теперь задаём действие по тапу на иконку. Пользователь может задать запуск приложения, переход по URL, кастомное действие, либо сделать кнопку, которая ничего не делает. В нашем случае это запуск приложения, то есть Launch App. В появившемся списке всех установленных и системных приложений находим «Лайфхакер». Действие для долгого тапа задавать не обязательно, а потому его можно пропустить.


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


Данная функция доступна только в Android 6.0.

Android поддерживает несколько типов меню. Первый - на телефоне есть отдельная кнопка Menu (в старых телефонах), нажатие которой вызывает меню. В новых устройствах отдельную кнопку убрали, заменив на значок меню в виде трёх точек в вертикальной ориентации. Второй тип - контекстное меню, которое появляется при нажатии и удерживания пальца на экране в нужном месте (также можно нажать и удерживать центральную кнопку на телефоне). Контекстное меню в свою очередь может иметь подменю. Сегодня мы познакомимся с первым типом меню. В данной статье будет рассматриваться работа с меню на новых устройствах под управлением Android 4.0 и выше.

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

Создайте новый проект на основе Empty Activity и запустите его. Никакого меню пока нет.

Создадим несколько строковых ресурсов в файле res/values/strings.xml , которые будут отвечать за пункты меню:

Settings Кот Кошка Котёнок

Теперь создайте новую папку menu в папке res res , | New | Directory ). Далее создайте в созданной папке файл menu_main.xml - имя указывает, что меню относится к основной активности MainActivity (правый щелчок мыши на папке menu | New | Menu Resource File ). Если вы будете создавать приложение с несколькими экранами, то у каждой активности будет отдельное меню со своими настройками. Пока откроем файл menu_main.xml и добавим в полученный шаблон свой код:

Откроем файл MainActivity . Сейчас в нём только один метод onCreate() . Добавим новый метод onCreateOptionsMenu() . Именно данный метод отвечает за появление меню у активности. Выберите в студии меню Code | и в следующим окне начинайте вводить название метода по первым буквам. Можно вводить по первым заглавным буквам, т.е. ocom (o nC reateO ptionsM enu), чтобы быстро найти нужную строку. Нажимаем кнопку OK и получаем заготовку.

@Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); }

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

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; }

В методе inflate() вы указываете на ресурс меню (R.menu.menu_main ) и объект класса Menu .

По английски "inflate" переводится как надувать, т.е. по замыслу разработчиков Android, мы как бы надуваем данными объект, например, меню. Но на самом деле слово "inflate" происходит от словосочетания in flat - в квартиру. Существует старинная традиция запускать в квартиру первым кота, который исследует все закоулки дома и заявляет о своём согласии жить в нём. Так и мы запускаем данные из XML-файла в объект MenuInflater.

Запустите проект. Теперь в правой части заголовка вы увидите значок из трёх точек, выстроенных в вертикальную линию. Нажмите на значок, чтобы увидеть пункт меню Settings .

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

Запустите проект и попробуйте снова вызвать меню. Вы увидите три новых пункта.


Параметры id и title не нуждаются в объяснениях. Параметр orderInCategory позволяет задать свой порядок вывода пунктов меню. Предположим вы создали пять пунктов меню, но пока не определились с порядком их вывода на экране. Чтобы не перемещать постоянно целые блоки кода для пунктов меню в нужном порядке, можно воспользоваться данным параметром.

И, наконец, важный атрибут app:showAsAction определяет поведение меню в ActionBar . Значение never означает, что элемент меню не должен выводиться в заголовке, а только в всплывающем меню, т.е. находиться за тремя точками. Если вы установите значение always , то пункт Settings сразу появится в заголовке вашего приложения. Также доступны значения ifRooms , withText и collapseActionView . Попробуйте самостоятельно. Например, ifRoom выводит пункт меню, если позволяет место. Если пунктов будет много, то они будут только мешаться. Как правило, в таком варианте выводят очень короткое слово или значок для частых операций, чтобы избежать лишнего щелчка на три точки.

Обратите внимание на атрибут app:showAsAction , который относится к пространству имён xmlns:app="http://schemas.android.com/apk/res-auto" . Было время, когда такого пространства имён не существовало и в проектах использовался атрибут android:showAsAction из стандартного пространства имён. Если студия будет ругаться на ошибку, то отредактируйте код.

Пока пункты меню не выполняют полезной работы. Любое нажатие на пункт просто закрывает меню без видимых последствий. Мы ещё не написали код для обработки нажатий.

Выбор пунктов меню

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

@Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); }

Параметр item отвечает за пункт меню. Вам следует получить идентификатор меню через метод getItemId() и указать для него код. Так как обычно меню состоит из нескольких пунктов, то удобно использовать конструкции if/else или switch . Для вывода информации воспользуемся текстовой меткой. Добавьте на экран активности компонент TextView . Можете использовать имеющийся TextView с надписью "Hello World!", только присвойте ему идентификатор.

android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!"/>

Добавим код в заготовку для выбранного пункта меню:

@Override public boolean onOptionsItemSelected(MenuItem item) { // получим идентификатор выбранного пункта меню int id = item.getItemId(); TextView infoTextView = (TextView) findViewById(R.id.textView); // Операции для выбранного пункта меню switch (id) { case R.id.action_cat1: infoTextView.setText("Вы выбрали кота!"); return true; case R.id.action_cat2: infoTextView.setText("Вы выбрали кошку!"); return true; case R.id.action_cat3: infoTextView.setText("Вы выбрали котёнка!"); return true; default: return super.onOptionsItemSelected(item); } }

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


Существует альтернативный способ через XML, похожий на обработку щелчков кнопки (начиная с Android 3.0). Вы можете добавить атрибут android:onClick в ресурсах меню, и вам не нужно использовать вызов метода onOptionsItemSelected() . При помощи android:onClick вы можете указать нужный метод при выборе пункта меню. Добавьте данный атрибут к пункту Settings

Теперь в коде активности напишем следующее:

// у атрибута пункта меню Settings установлено значение android:onClick="onSettingsMenuClick" public void onSettingsMenuClick(MenuItem item) { TextView infoTextView = (TextView) findViewById(R.id.textView); infoTextView.setText("Вы выбрали пункт Settings, лучше бы выбрали кота"); }

Переключатели

Внешний вид пунктов меню можно изменить на вид с переключателями. Для этого нужно добавить элемент group с атрибутом android:checkableBehavior="single" :

Большого смысла в этом режиме я не вижу. И рассматривать его не будем.

Режим Design

В Android Studio 2.2 добавили графический режим построения меню, которых похож на панель инструментов для добавления новых компонентов на экран. У меню панель состоит из четырёх элементов: Menu Item , Search Item , Menu , Group .


Принцип тот же, выбираете нужный элемент и перетаскиваете его на экран в область меню. Если вы изучили ручное создание меню, то данный способ не вызовет у вас затруднений. С его помощью можно быстро набросать структуру меню, а затем подправить вручную.

Android поддерживает несколько типов меню. Первый - на телефоне есть отдельная кнопка Menu (в старых телефонах), нажатие которой вызывает меню. В новых устройствах отдельную кнопку убрали, заменив на значок меню в виде трёх точек в вертикальной ориентации. Второй тип - контекстное меню, которое появляется при нажатии и удерживания пальца на экране в нужном месте (также можно нажать и удерживать центральную кнопку на телефоне). Контекстное меню в свою очередь может иметь подменю. Сегодня мы познакомимся с первым типом меню. В данной статье будет рассматриваться работа с меню на новых устройствах под управлением Android 4.0 и выше.

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

Создайте новый проект на основе Empty Activity и запустите его. Никакого меню пока нет.

Создадим несколько строковых ресурсов в файле res/values/strings.xml , которые будут отвечать за пункты меню:

Settings Кот Кошка Котёнок

Теперь создайте новую папку menu в папке res res , | New | Directory ). Далее создайте в созданной папке файл menu_main.xml - имя указывает, что меню относится к основной активности MainActivity (правый щелчок мыши на папке menu | New | Menu Resource File ). Если вы будете создавать приложение с несколькими экранами, то у каждой активности будет отдельное меню со своими настройками. Пока откроем файл menu_main.xml и добавим в полученный шаблон свой код:

Откроем файл MainActivity . Сейчас в нём только один метод onCreate() . Добавим новый метод onCreateOptionsMenu() . Именно данный метод отвечает за появление меню у активности. Выберите в студии меню Code | и в следующим окне начинайте вводить название метода по первым буквам. Можно вводить по первым заглавным буквам, т.е. ocom (o nC reateO ptionsM enu), чтобы быстро найти нужную строку. Нажимаем кнопку OK и получаем заготовку.

@Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); }

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

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; }

В методе inflate() вы указываете на ресурс меню (R.menu.menu_main ) и объект класса Menu .

По английски "inflate" переводится как надувать, т.е. по замыслу разработчиков Android, мы как бы надуваем данными объект, например, меню. Но на самом деле слово "inflate" происходит от словосочетания in flat - в квартиру. Существует старинная традиция запускать в квартиру первым кота, который исследует все закоулки дома и заявляет о своём согласии жить в нём. Так и мы запускаем данные из XML-файла в объект MenuInflater.

Запустите проект. Теперь в правой части заголовка вы увидите значок из трёх точек, выстроенных в вертикальную линию. Нажмите на значок, чтобы увидеть пункт меню Settings .

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

Запустите проект и попробуйте снова вызвать меню. Вы увидите три новых пункта.

Параметры id и title не нуждаются в объяснениях. Параметр orderInCategory позволяет задать свой порядок вывода пунктов меню. Предположим вы создали пять пунктов меню, но пока не определились с порядком их вывода на экране. Чтобы не перемещать постоянно целые блоки кода для пунктов меню в нужном порядке, можно воспользоваться данным параметром.

И, наконец, важный атрибут app:showAsAction определяет поведение меню в ActionBar . Значение never означает, что элемент меню не должен выводиться в заголовке, а только в всплывающем меню, т.е. находиться за тремя точками. Если вы установите значение always , то пункт Settings сразу появится в заголовке вашего приложения. Также доступны значения ifRooms , withText и collapseActionView . Попробуйте самостоятельно. Например, ifRoom выводит пункт меню, если позволяет место. Если пунктов будет много, то они будут только мешаться. Как правило, в таком варианте выводят очень короткое слово или значок для частых операций, чтобы избежать лишнего щелчка на три точки.

Обратите внимание на атрибут app:showAsAction , который относится к пространству имён xmlns:app="http://schemas.android.com/apk/res-auto" . Было время, когда такого пространства имён не существовало и в проектах использовался атрибут android:showAsAction из стандартного пространства имён. Если студия будет ругаться на ошибку, то отредактируйте код.

Пока пункты меню не выполняют полезной работы. Любое нажатие на пункт просто закрывает меню без видимых последствий. Мы ещё не написали код для обработки нажатий.

Выбор пунктов меню

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

@Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); }

Параметр item отвечает за пункт меню. Вам следует получить идентификатор меню через метод getItemId() и указать для него код. Так как обычно меню состоит из нескольких пунктов, то удобно использовать конструкции if/else или switch . Для вывода информации воспользуемся текстовой меткой. Добавьте на экран активности компонент TextView . Можете использовать имеющийся TextView с надписью "Hello World!", только присвойте ему идентификатор.

android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!"/>

Добавим код в заготовку для выбранного пункта меню:

@Override public boolean onOptionsItemSelected(MenuItem item) { // получим идентификатор выбранного пункта меню int id = item.getItemId(); TextView infoTextView = (TextView) findViewById(R.id.textView); // Операции для выбранного пункта меню switch (id) { case R.id.action_cat1: infoTextView.setText("Вы выбрали кота!"); return true; case R.id.action_cat2: infoTextView.setText("Вы выбрали кошку!"); return true; case R.id.action_cat3: infoTextView.setText("Вы выбрали котёнка!"); return true; default: return super.onOptionsItemSelected(item); } }

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

Существует альтернативный способ через XML, похожий на обработку щелчков кнопки (начиная с Android 3.0). Вы можете добавить атрибут android:onClick в ресурсах меню, и вам не нужно использовать вызов метода onOptionsItemSelected() . При помощи android:onClick вы можете указать нужный метод при выборе пункта меню. Добавьте данный атрибут к пункту Settings

Теперь в коде активности напишем следующее:

// у атрибута пункта меню Settings установлено значение android:onClick="onSettingsMenuClick" public void onSettingsMenuClick(MenuItem item) { TextView infoTextView = (TextView) findViewById(R.id.textView); infoTextView.setText("Вы выбрали пункт Settings, лучше бы выбрали кота"); }

Переключатели

Внешний вид пунктов меню можно изменить на вид с переключателями. Для этого нужно добавить элемент group с атрибутом android:checkableBehavior="single" :

Большого смысла в этом режиме я не вижу. И рассматривать его не будем.

Режим Design

В Android Studio 2.2 добавили графический режим построения меню, которых похож на панель инструментов для добавления новых компонентов на экран. У меню панель состоит из четырёх элементов: Menu Item , Search Item , Menu , Group .

Принцип тот же, выбираете нужный элемент и перетаскиваете его на экран в область меню. Если вы изучили ручное создание меню, то данный способ не вызовет у вас затруднений. С его помощью можно быстро набросать структуру меню, а затем подправить вручную.

Первого месяца обучения. Рассмотрим работу с меню глубже. Будут рассмотрены как старые устройства под Android 2.3, так и новые телефоны на Android 4.0.

Меню выбора опций (Options Menu)

За меню отвечает класс android.view.Menu . Каждая активность связана с одним объектом меню. Само меню содержит пункты меню (класс android.view.MenuItem ) и подменю (класс android.view.SubMenu ).

При нажатии кнопки Menu на старых телефонах появляется набор пунктов меню, прикрепляемый к активности. Меню может содержать значки. Такое меню может содержать шесть пунктов (как правило). При наличии более шести пунктов используется расширенное меню - в этом случае вместо шестого пункта появляется пункт Опции (More). При нажатии данного пункта показывается расширенное меню со списком пунктов, которые не поместились в основной части меню выбора опций.

Когда меню открывается впервые, Android вызывает метод onCreateOptionsMenu() , передавая в качестве параметра объект Menu . Меню можно создавать в виде ресурсов в XML-файле или использовать метод add() .

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

Создание меню при помощи ресурсов

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

Определяет меню, которое будет содержать пункты меню. Элемент должен быть корневым элементом в XML-структуре файла и может содержать один или несколько элементов и Создает непосредственно пункты меню. Данный элемент может иметь вложенный элемент для создания подменю При желании можете также использовать невидимый контейнер для элементов . Это позволяет достичь некоторых эффектов

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

Мы создали меню с двумя пунктами. Каждый пункт включает в себя следующие атрибуты:

Android:id Идентификатор пункта меню, по которому приложение может распознать при выделении пункта меню пользователем android:title Текст, который будет выводиться в меню

Существуют и другие атрибуты для элемента item , например android:icon="@drawable/home" позволит также вывести значок для пункта меню, а android:enabled="false" позволяет сделать пункт меню недоступным.

Атрибут android:titleCondensed применяется в том случае, если обычный заголовок слишком широкий и не «помещается» в выбранном элементе меню.

Атрибут android:orderInCategory определяет порядок, в котором отображаются элементы меню MenuItems.

При создании меню мы указали на строковые ресурсы @string/new_game и @string/help . Необходимо добавить новые строки в файле strings.xml :

Новая игра Справка

Теперь нужно внести изменения в классе активности, в котором будет выводиться меню. Программа должна сконвертировать созданный нами ресурс меню в программный объект. Для этой цели существует специальный метод MenuInflater.inflate() , который вызывается в специальном методе обратного вызова onCreateOptionsMenu() . Данный метод и предназначен для вывода меню при нажатии кнопки MENU на устройстве:

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.game_menu, menu); return true; }

После вставки кода среда разработки попросит импортировать недостающие пространства имен.

Import android.view.Menu; import android.view.MenuInflater;

Метод onCreateOptionsMenu() метод инициирует первое появление меню на экране и принимает в качестве параметра объект Menu (для старых устройств). Вы можете сохранить ссылку на меню и использовать ее в любом месте кода, пока метод onCreateOptionsMenu() опять не будет вызван. Вам необходимо всегда использовать реализацию этого обработчика из родительского класса, потому как она при необходимости автоматически включает в меню дополнительные системные пункты. В новых устройствах метод вызывается при создании активности. Метод должен возвращать значение true , чтобы меню было видимым на экране.

Запустив программу, нажмите кнопку MENU на эмуляторе, чтобы увидеть созданное меню.

Метод getMenuInflater() возвращает экземпляр класса MenuInflater , который мы используем для чтения данных меню из XML.

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

Сначала добавим шесть пунктов.

Добавим еще один пункт к меню, чтобы их стало семь.

Выбор пунктов меню

Мы научились создавать меню. Но пока оно бесполезно, так как пункты меню никак не реагируют на наши нажатия. Для обработки нажатий пунктов меню служит метод onOptionsItemSelected() . Метод распознает пункт, выбранный пользователем, через MenuItem . Мы можем теперь определить выбранный пункт через вызов getItemId() , который возвращает идентификатор пункта меню. Далее через оператор switch нам остается определить нужные команды:

@Override public boolean onOptionsItemSelected(MenuItem item) { // Операции для выбранного пункта меню switch (item.getItemId()) { case R.id.new_game: newGame(); return true; case R.id.help: showHelp(); return true; default: return super.onOptionsItemSelected(item); } } public void newGame() { edtext.setText("Выбран пункт Новая игра"); } public void showHelp() { edtext.setText("Выбран пункт Справка"); }

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

В приведенном примере getItemId() запрашивает ID для выбранного пункта меню и начинает сравнивать через оператор выбора switch с идентификаторами, которые мы задали в XML-ресурсах. При обнаружении нужного идентификатора выполняется обработчик для заданного пункта меню. Если программа ничего не обнаружит, то выполняется оператор default , который возвращает super class.

В Android 3.0 можно добавить атрибут android:onClick в ресурсах меню, и вам уже не нужно использовать onOptionsItemSelected() . При помощи android:onClick вы можете указать нужный метод при выборе пункта меню.

// у атрибута пункта меню установлено значение android:onClick="onMenuClick" public void onMenuClick(MenuItem item){ edtext.setText("Выбран пункт Накормить кота"); }

Программное создание меню

Рассмотрим программное создание меню для полноты картины. Нам понадобится определить несколько констант для пунктов меню:

// идентификаторы для пунктов меню private static final int IDM_OPEN = 101; private static final int IDM_SAVE = 102; public boolean onCreateOptionsMenu(Menu menu) { // добавляем пункты меню menu.add(Menu.NONE, IDM_OPEN, Menu.NONE, "Открыть"); menu.add(Menu.NONE, IDM_SAVE, Menu.NONE, "Сохранить"); }

У метода add() есть четыре параметра:

  • идентификатор группы - позволяет связывать пункт меню с группой других пунктов этого меню
  • идентификатор пункта для обработчика события выбора пункта меню
  • порядок расположения пункта в меню - позволяет определять позицию в меню. По умолчанию (Menu.NONE или 0) пункты идут в том порядке, как задано в коде
  • заголовок - текст, который выводится в пункте меню. Можно использовать строковый ресурс

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

Если вы хотите создать меню со значками, то воспользуйтесь методом setIcon()

Menu.add(Menu.NONE, IDM_OPEN, Menu.NONE, "Открыть") .setIcon(R.drawable.icon_menu_open);

Напомним еще раз, что значки можно добавить только к шести пунктам меню (или к пяти, если пунктов больше шести).

Метод onCreateOptionsMenu вызывается системой только один раз при создании меню. Если вам требуется обновить меню во время работы программы, то используйте метод обратного вызова onPrepareOptionsMenu() .

При выборе пункта меню вызывается метод onOptionsItemSelected , который передает объект MenuItem - пункт меню, выбранный пользователем. При помощи метода getItemId можно получить идентификатор выбранного пункта меню. После идентификации пункта меню можно написать код для обработки события выбора меню:

Public boolean onOptionsItemSelected(MenuItem item) { switсh (item.getItemId()) case IDM_OPEN: return true; case IDM_SAVE: return true; return false; }

Горячие клавиши

Также можно задавать горячие клавиши для быстрого доступа, используя символы клавиатуры, при помощи нескольких методов:

  • setAlphabeticShortcut(char) - добавляет символ
  • setNumericShortcut(int) - добавляет число
  • setShortcut(char, int) - добавляет комбинацию символа и числа

Например, если задать горячую клавишу setAlphabeticShortcut("q");, то при открытии меню (или при удерживании клавиши MENU) нажатие клавиши Q выберет данный пункт меню. Эта горячая клавиша (или сочетание клавиш) будет показана как подсказка, отображающая ниже имени пункта меню. В новых клавиатурах есть отдельная клавиша Ctrl , которая работает также, как на обычных клавиатурах.

Горячие клавиши можно создать и через XML: android:alphabeticShortcut="c" .

Обрабатывать нажатия можно через метод активности onKeyShortcut() :

@Override public boolean onKeyShortcut(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_R: Toast.makeText(this, "Reply", Toast.LENGTH_SHORT).show(); return true; default: return super.onKeyShortcut(keyCode, event); } }

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

Подменю можно добавить в любое меню, кроме другого подменю. Подменю создается в методе обратного вызова onCreateOptionsMenu() с помощью метода addSubMenu() , который возвращает объект SubMenu . В объект SubMenu можно добавить дополнительные пункты к этому меню, используя метод add() . Например:

Public static final int IDM_HELP = 101; public static final int IDM_NEW = 201; public static final int IDM_OPEN = 202; public static final int IDM_SAVE = 203; public static final int IDM_CUT = 301; public static final int IDM_COPY = 302; public static final int IDM_PASTE = 303; @Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu subMenuFile = menu.addSubMenu("Файл"); subMenuFile.add(Menu.NONE, IDM_NEW, Menu.NONE, "Новый"); subMenuFile.add(Menu.NONE, IDM_OPEN, Menu.NONE, "Открыть"); subMenuFile.add(Menu.NONE, IDM_SAVE, Menu.NONE, "Сохранить"); SubMenu subMenuEdit = menu.addSubMenu("Правка"); subMenuEdit.add(Menu.NONE, IDM_CUT, Menu.NONE, "Вырезать"); subMenuEdit.add(Menu.NONE, IDM_COPY, Menu.NONE, "Копировать"); subMenuEdit.add(Menu.NONE, IDM_PASTE, Menu.NONE, "Вставить"); menu.add(Menu.NONE, IDM_HELP, Menu.NONE, "Справка"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { CharSequence message; switch (item.getItemId()) { case IDM_NEW: message = "Выбран пункт Новый"; break; case IDM_OPEN: message = "Выбран пункт Открыть"; break; case IDM_SAVE: message = "Выбран пункт Сохранить"; break; case IDM_CUT: message = "Выбран пункт Вырезать"; break; case IDM_COPY: message = "Выбран пункт Копировать"; break; case IDM_PASTE: message = "Выбран пункт Вставить"; break; case IDM_HELP: message = "Выбран пункт Справка"; break; default: return false; } // выводим уведомление о выбранном пункте меню Toast toast = Toast.makeText(this, message, Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); return true; }

Теперь при выборе пункта меню появится еще одно окно с подменю. Попробуйте сами.

Добавление флажков и переключателей

В пункты меню возможно добавление флажков или переключателей. Чтобы добавить флажок или переключатель для отдельного элемента меню, необходимо использовать метод setCheckable() :

MenuItem item = menu.add(0, IDM_FORMAT_BOLD, 0, "Bold"); item.setCheckable(true);

Если есть необходимость добавить несколько пунктов меню с флажками или переключателями, то можно объединить их в группы меню, создав отдельный идентификатор. Пункт меню добавляется в группу через метод add() , передав ему в качестве первого параметра идентификатор группы меню. Допустим, мы объявили идентификаторы для группы меню Цвет и элементов меню для установки цвета:

Public static final int IDM_COLOR_GROUP = 400; public static final int IDM_COLOR_RED = 401; public static final int IDM_COLOR_GREEN = 402; public static final int IDM_COLOR_BLUE = 403;

Теперь для создания группы меню с флажками нужно назначить идентификатор группы на каждый пункт меню и вызвать метод setGroupCheckable() для всей группы (этом случае нет необходимости вызывать метод setCheckable() для каждого пункта меню):

SubMenu subMenuColor = menu.addSubMenu("Цвет"); subMenuColor.add(IDM_COLOR_GROUP, IDM_COLOR_RED, Menu.NONE, "Красный"); subMenuColor.add(IDM_COLOR_GROUP, IDM_COLOR_GREEN, Menu.NONE,"Зеленый"); subMenuColor.add(IDM_COLOR_GROUP, IDM_COLOR_BLUE, Menu.NONE, "Синий"); subMenuColor.setGroupCheckable(IDM_COLOR_GROUP, true, false);

У метода setGroupCheckable() три параметра:

  • первый параметр - идентификатор группы меню;
  • второй параметр - true, если в группе разрешены переключатели или флажки;
  • третий параметр - устанавливает единственный (true) или множественный (false) выбор пунктов меню. Этот параметр фактически определяет внешний вид меню - это будет меню с переключателями или флажками.

    Для управления состоянием флажков и переключателей в обработчике события выбора пункта меню нужно написать следующее:

    @Override public boolean onOptionsItemSelected(MenuItem item) { CharSequence message; switch (item.getItemId()) { ... case IDM_COLOR_RED: // инвертируем состояние флажка item.setChecked(!item.isChecked()); message = "Красный цвет"; break; default: return false; }

    Запустите проект, вызовите меню и выберите пункт меню Цвет . У вас появится подменю с тремя пунктами (Красный, Зеленый, Синий) в виде флажков. Состояние флажков и переключателей обрабатывается в коде программы и сохраняется при повторных вызовах меню.

    Можно сразу назначить намерение выбранному пункту меню через метод setIntent(), которое сработает при нажатии этого пункта, если данное событие не было перехвачено обработчиками onMenuItemClickListener (устар.) или onOptionsItemSelected. Сработав, намерение передается в метод startActivity.

    MenuItem.setIntent(new Intent(this, MyOtherActivity.class));

    Программное открытие или закрытие меню

    Если вам по каким-то причинам нужно программно открыть меню (например, в демонстрационных целях), то используйте метод openOptionsMenu() :

    OpenOptionsMenu();

    Для программного закрытия меню используйте метод closeOptionsMenu() , впрочем у меня повторный вызов метода openOptionsMenu() также закрывает меню.

    Программное удаление пункта меню

    Допустим, мы определили пункт меню в xml-файле:

    Чтобы удалить явно лишний пункт меню из нашей программы о котах, нужно получить доступ к пункту меню через метод findItem() и сделать его невидимым. Ссылку на объект Menu нужно передать в метод onCreateOptionsMenu , чтобы программа узнала об изменении состава меню.

    // переменная класса Menu menu; @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // передаём ссылку на наш объект this.menu = menu; getMenuInflater().inflate(R.menu.test, menu); return true; } // щелчок кнопки public void onClick(View v) { if (menu != null) { // находим нужный элемент MenuItem item_dog = menu.findItem(R.id.action_dog); // делаем его невидимым item_dog.setVisible(false); } }

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

    Надо запомнить состояние пункта меню и сохранить его в объекте типа Bundle в методе onSaveInstanceState , а в методе onCreate() извлечь сохранённое состояние и передать методу onPrepareOptionsMenu , который вызывается перед показом меню на экране:

    Package ru.alexanderklimov.test; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class TestActivity extends Activity { Menu menu; Boolean savedMenuDogIsVisible; final static String KEY_MENU_DOG = "KEY_MENU_DOG"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); // извлекаем данные о видимости пункта меню if (savedInstanceState != null) { savedMenuDogIsVisible = savedInstanceState.getBoolean(KEY_MENU_DOG, true); } } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); this.menu = menu; getMenuInflater().inflate(R.menu.test, menu); return true; } public void onClick(View v) { if (menu != null) { MenuItem item_dog = menu.findItem(R.id.action_dog); // прячем пункт меню item_dog.setVisible(false); } } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); if (menu != null) { MenuItem item_dog = menu.findItem(R.id.action_dog); // сохраняем текущее состояние пункта меню - true или false outState.putBoolean(KEY_MENU_DOG, item_dog.isVisible()); } } @Override public boolean onPrepareOptionsMenu(Menu menu) { if (savedMenuDogIsVisible != null) { MenuItem item_dog = menu.findItem(R.id.action_dog); // перед выводом на экран узнаём нужное состоятние пункта меню item_dog.setVisible(savedMenuDogIsVisible); } return super.onPrepareOptionsMenu(menu); } }

    Определить наличие кнопки Menu

    На старых устройствах использовалась реальная кнопка Menu. В новых версиях Android меню убрали в ActionBar и её наличие в виде отдельной кнопки стало необязательным. Но многие производители по-прежнему выпускают телефоны с кнопкой для меню. Чтобы определить, есть ли такая кнопка, в Android 14 добавили новый метод, который позволит определить наличие этой кнопки.

    If (Build.VERSION.SDK_INT <= 10 || (Build.VERSION.SDK_INT >= 14 && ViewConfiguration.get(this) .hasPermanentMenuKey())) { // menu key is present Toast.makeText(this, "Кнопка Menu есть", Toast.LENGTH_LONG).show(); } else { // No menu key Toast.makeText(this, "Кнопки Menu нет", Toast.LENGTH_LONG).show(); }

    Разметка для меню

    В современных устройствах меню является частью ActionBar . И вы можете настроить разметку меню через XML.

    Допустим, вы выбрали такой вариант:

    В атрибуте showAsAction не используйте значение never , иначе разметку не увидите. Сама разметка задана через атрибут actionLayout . Код для разметки:

    Меню в фрагментах

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

    @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.fragment_crime_list, menu); }

    FragmentManager отвечает за вызов onCreateOptionsMenu() при получении активностью обратного вызова onCreateOptionsMenu() от системы. Вы должны явно сообщить менеджеру FragmentManager , что фрагмент должен получить вызов onCreateOptionsMenu() . Для этого вызывается метод setHasOptionsMenu() :

    // В коде фрагмента @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); getActivity().setTitle(R.string.cat); ... }

Итак, давайте сегодня создадим простое меню, для приложения на Android. Создадим новый проект. Назовем его Mymenu, нажмем next. Выберем Empty Activity. Нажмем finish.

Система Android studio подготовит нам новый проект, перейдем в gradle скрипы. В Build gradle, добавим новую имплементацию. Нам понадобятся пакет

implementation "com.android.support:design:26.0.0-beta1"

По крайней мере, в моем проекте. Нажмем синхронизировать проект.

Пункты меню

Перейдем в папку Res и создадим в ней новую Andriod ресурсную папку с ресурсным типом - меню. В ней же, создадим новый ресурс файл меню. Имя файлу присвоим, как и имя папки - menu.

На наше основное меню перетаскиванием, добавим MenuItem в количестве 3 штук.

В файле strings.xml напишем новые название, для пунктов меню, создав дополнительные строковые значение для них.

Пусть item1 будет Пункт 1, item2 Пункт 2, и item3 пусть будет Выход.

Пункт 1 Пункт 2 Выход

В текстовом варианте menu.xml присвоим названия из strings.xml для наших пунктов. Также для каждого item мы добавим, Android:id с именем action1, action2,action3,

для взаимодействия с данными пунктами. Действие номер 1 будет отвечать за что-то, какая то реакция, нажатие пункта Action 2, соответственно, будет отвечать за другие действие, Action 3 будет отвечать за выход из приложения.

В файле MainActivity напишем несколько функций для работы с меню:

onCreateOptionsMenu @Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.menu, menu); return true; } onOptionsItemSelected @Override public boolean onOptionsItemSelected(MenuItem item){ int id = item.getItemId(); switch (id){ case R.id.action1: txt.setText(R.string.item1); return true; case R.id.action2: txt.setText(R.string.item2); return true; case R.id.action3: txt.setText(R.string.item3); finish(); return true; } return super.onOptionsItemSelected(item); }

Объявим переменную типа TextView txt, и свяжем ее с элементом TextView, в onCreate через

txt=(TextView)findViewById(R.id.txt),

в макете activity_main.xml, добавив ему

android:id="@+id/txt"

для отображения текста.

Запустим в эмуляторе наше приложение. Как видим, появляются пункты меню, при нажатии на значение Пункт 1 или 2, текст меняется на Пункт 1 или Пункт 2, при нажатии на кнопку Выход появляется текст Выход и приложение закрывается.

Верстка меню

Кажется, все хорошо. Однако, как всегда в Android Studio данное меню будет работать только на эмуляторе, и поэтому добавим в файл styles.xml небольшой код, а перед этим в AndroidManifest.xml изменим

android:theme="@style/AppTheme"

android:theme="@style/AppTheme.NoActionBar"

который говорит о том, что новый стиль без ActionBar. Также в MainActivity onCreate внесем переменную toolbar c типом ToolBar. Определим ее через toolbar = (Toolbar)findViewById(R.id.toolbar), и подключим поддержку setSupportActionBar(toolbar).

В макет activity_main.xml перед TextView добавим следующий код:

Подключим эти виджеты в импорт нашего приложения.

import android.support.v7.widget.Toolbar;

Нажмем Alt+Enter, и у нас добавится, обновится импорт нашего приложения. Возможно, придется сделать несколько раз для подключения виджета. Нажмем Сохранить.

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

Загрузка...