Бесплатно

Программирование приложений для мобильных устройств под управлением Android. Часть 1

Текст
iOSAndroidWindows Phone
Куда отправить ссылку на приложение?
Не закрывайте это окно, пока не введёте код в мобильном устройстве
ПовторитьСсылка отправлена
Отметить прочитанной
Шрифт:Меньше АаБольше Аа

Есть три вида меню Android:

Меню опций (options menu), которое пользователь получает, когда нажимает кнопку меню. У более старых устройств на базе Android обычно была специальная физическая кнопка меню, которую уже не делают на более новых телефонах.

Контекстные меню (context menu). Эти меню присоединены к определенным вью, и появляются только тогда, когда пользователь длительно нажимает эту вьюшку. Контекстные меню обычно используются для работы с определенными данными, связанными с вьюшками, в то время как меню опций используются для глобальных операций и влияют на целое приложение.

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

Давайте рассмотрим некоторые примеры. Пример меню опций. В этом приложении есть значок меню (три вертикальные точки) в нижней части. Если по нему кликнуть, раскрывается меню, позволяя сделать такие вещи, как: определить, какие контакты вывести на экран, импортировать/экспортировать контакты, а также произвести настройку приложения.


Затем давайте посмотрим пример контекстного меню. Откроем браузер. Далее через меню опций переходим до закладок. И далее выбираем вкладку «History», которая показывает список недавно посещённых веб-страниц. Теперь, если нажать и удерживать одну из этих записей истории, будет вызвано новое меню.



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

Чтобы создать меню, сначала необходимо определить содержание меню в xml-файле в каталоге res/menu. Когда пользователь открывает меню, Android вызывает определенный метод – onCreateOptionsMenu для меню опций и их подменю или onCreateContextMenu для контекстных меню. В этих методах мы будем использовать Menu Inflater, чтобы создавать лейаут меню.

Когда пользователь выберет один из пунктов меню, Android вызовет метод onOptionsItemSelected для меню опций и подменю или onContextItemSelected для контекстных меню. Давайте рассмотрим простой пример со всеми этими различными видами меню.

Это приложение «HelloAndroidWithMenus». При его запуске вы увидите текстовое вью со словами «Hello Android». Если нажать и подержать это текстовое поле, то раскроется контекстное меню.

В верхнем правом углу есть значок (три вертикальные точки), который предоставляет доступ к пунктам меню. Назовем этот значок кнопкой «Menu», а место, где он находится – зоной переполнения (overflow area).

Давайте посмотрим на то, как это реализовано в исходном коде. Сначала мы посмотрим на метод onCreateOptionsMenu. В этом методе мы получаем Menu Inflater, и затем вызываем его метод Inflate, передавая ссылку на лейаут меню.



Теперь откроем файл меню Top_menu.xml. Этот файл содержит тег меню, и в нем есть несколько тегов элементов. В каждом теге есть атрибуты, такие как: ID, иконка, которая выводится на экран для этого элемента и заголовок этого элемента.

В Activity в последней строке onCreateOptionsMenu возвращаем значение true, указав, что мы хотим вывести на экран этот пункт меню. Теперь, когда пользователь выбирает один из этих пунктов меню, Android вызовет onOptionsItemSelected, передав ему выбранный пункт.



Здесь мы проверяем ID элементов, и затем совершаем соответствующие действия для этого элемента.

Теперь посмотрим на то, как устанавливается контекстное меню. Сначала, когда пользователь впервые вызывает контекстное меню, Android вызывает onCreateContextMenu.



Код подобен тому, что мы видели в меню опций. Мы получаем Menu Inflater и передаем ему xml-файл лейаута. У этого меню есть один-единственный элемент с ID help_guide.



Когда пользователь выбирает один из пунктов контекстного меню, Android вызывает onContextItemSelected, передав ему выбранный пункт.

В дополнение к вышесказанному, меню могут также поддерживать еще много расширенных функций. Например, вы можете поместить связанные пункты меню в группу – таким образом, вы сможете обработать и управлять ими как одним пунктом. Вы можете также связать сочетания клавиш с определенными пунктами меню (shortcut) – таким образом, вы сможете получить доступ к ним более быстро. И вы можете связать Intent с пунктами меню. Так, например, можно запустить какую-нибудь Activity, когда пользователь кликает по определенному пункту меню.

Панель Action Bar была добавлена в Android 3.0 и представляет собой подобие панели управления приложением, которую вы часто видите в десктопных приложениях. Это та панель наверху окна приложения, которая показывает такие пункты как: «Файл», «Редактирование», «Справка» и т. д. Основная идея Action Bar состоит в том, что вместо того, чтобы скрывать действия внутри традиционного всплывающего меню, вы можете предоставить пользователям быстрый доступ к действиям, которые они будут использовать. Давайте рассмотрим некоторые варианты использования Action Bar.

Первый пример возвращает нас к уроку о фрагментах, к приложению с просмотром цитат из пьес Шекспира. Здесь добавлено несколько элементов к Action Bar, эти элементы описаны тремя различными классами. Некоторые элементы пришли из основной Activity. Некоторые пришли из фрагмента, который выводит на экран заголовки. И некоторые пришли из фрагмента, который выводит на экран цитаты.

Как прежде, когда запускается приложение, есть основная Activity, которая размещает единственный фрагмент заголовков. Теперь, если мы посмотрим на Action Bar наверху экрана, то увидим две текстовых кнопки в правом верхнем углу – «ActivityAction» и «TitleAction». Первая была помещена туда кодом Activity, а вторая – фрагментом заголовков. И, если кликнуть по ним, то появится всплывающее сообщение, показывая какой объект фактически выполняет действия, связанные с этой кнопкой в Action Bar.

Теперь, если кликнуть по одному из заголовков, то в лейаут будет динамически добавлен фрагмент цитат. А фрагмент цитат тоже добавляет динамически некоторые элементы к Action Bar. В этом случае добавились два действия – QuoteAction и второе действие, которое помещено в зону переполнения (доступ к зоне переполнения обеспечен через кнопку «Меню» – три вертикальные точки). И, если кликнуть по QuoteAction, появится всплывающее сообщение, где говорится, что это действие было вызвано фрагментом цитат. Если кликнуть по значку переполнения (он же – кнопка «Меню»), это вызовет второй элемент – SecondaryQuoteAction, созданный фрагментом цитат. И если кликнуть по нему, то раскрывается связанный с ним текст.



Теперь давайте посмотрим на то, как это реализовано в исходном коде.



В файле menu.xml есть новый параметр – ShowAsAction, его значение – ifRoom/withText. Это означает, что Android должен показать этот элемент в Action Bar, если для него есть свободное место, иначе он будет скрыт в зоне переполнения. Это также означает, что элемент должен быть показан как текст, а не значок. Если же этот параметр будет равен “never”, то он всегда будет скрыт в зоне переполнения.

Action Bar также обеспечивает удобный способ переключения между различными окнами приложения. При таком использовании Action Bar экран разделен на две части – область вкладок и область содержимого. Класс ActionBar.Tab позволяет связать каждый фрагмент с отдельной вкладкой в области вкладок, и только одна вкладка может быть выбрана в любой момент. Таким образом, когда пользователь выбирает определенную вкладку, ее фрагмент может быть показан в области содержимого. Если пользователь выберет другую вкладку, то в области содержимого будет показан другой фрагмент.

Купите 3 книги одновременно и выберите четвёртую в подарок!

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

  1. Нажмите на многоточие
    рядом с книгой
  2. Выберите пункт
    «Добавить в корзину»