Создание меню настроек программы |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||
В этой статье рассмотрен простейший пример создания меню опций (options menu настроек) для программы Android. [Краткий обзор средств для создания меню опций] В приложении Android меню опций (или меню настроек) программы вызывается, если нажать на левую системную кнопку на устройстве. По умолчанию при создании проекта приложения в Eclipse с помощью мастера (File -> New -> Android Application Project) создается простейшее меню опций с единственным пунктом Settings. При выборе пункта Settings меню ничего не происходит, меню опций просто закрывается. В классе Activity встраивание меню делает процедура onCreateOptionsMenu, которая обычно создается автоматически, когда создается проект приложения. @Override public boolean onCreateOptionsMenu(Menu menu) { // Встраивание меню; здесь добавляются элементы на плашку // действий (action bar), если она присутствует. getMenuInflater().inflate(R.menu.main, menu); return true; } В среде Eclipse (ADT) есть удобный встроенный редактор меню, который откроется при двойном щелчке на файле res\menu\main.xml, если перейти на нижнюю вкладку Layout.
[Практический пример создания меню опций] Предположим, что нужен следующий простейший вариант меню настроек: при выборе пункта меню откроется подменю, в котором будет задаваться номер управляемого реле. Далее процесс создания такого меню по шагам. 1. В среде Eclipse (ADT) создайте новый проект. ...... 2. Теперь можно приступить к созданию меню. Двойным щелчком откройте файл res\menu\main.xml, перейдите на нижнюю закладку Layout, чтобы открылся графический редактор меню. Выбор реле можно сделать в виде пунктов подменю (Menu -> SubMenu). Наша цель создать простейшее меню следующего вида: Выбрать № реле (это единственный пункт главного меню) Реле 0 (подпункты меню, клик на которых выбирают конкретное управляемое реле) Реле 1 Реле 2 Реле 3 Реле 4 ... Реле 29 Сначала выберите главный пункт меню action_settings, и установите у него атрибут заголовка: Title Выбрать № реле Затем нажмите кнопку Add..., выберите второй вариант "Create new element in the selected element", кликните на Sub-Menu и кликните OK. Создастся подменю Sub-Menu. 3. Теперь нужно добавить элементы в подменю (Реле 0, Реле 1, ... Реле 29). Слева выберите элемент Sub-Menu, и нажмите кнопку Add..., снова должен быть выбран вариант "Create new element in the selected element", только теперь нужно кликнуть на Item, и кликнуть OK. Создастся один пункт для подменю Item (с идентификатором item1). Отредактируйте у него следующие свойства: Id @+id/relay000 Сохраните файл. Можно добавить остальные пункты подменю таким же способом, но удобнее сделать это в текстовом редакторе. 4. Переключитесь на нижнюю закладку редактора main.xml. Файл меню отобразится в текстовом редакторе, и будет иметь примерно такой вид: < menu xmlns:android="http://schemas.android.com/apk/res/android" > < item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings" > < menu > < item android:id="@+id/relay000" android:title="Реле 0"/ > < /menu > < /item > < /menu > Пункт подменю закодирован элементом item android:id="@+id/relay000" android:title="Реле 0". Добавьте методом копирования и вставки текста новые пункты подменю, исправив в них значение id и текст заголовка title. Запустите программу на выполнение, нажав Ctrl+F11, и протестируйте, как работает созданное меню.
Пункты подменю можно прокручивать вверх и вниз, и легко выбирать нужный. Всю работу на себя берет Android API, пока не понадобилось писать ни одной строки кода. 5. Пока наше меню ничего не умеет, кроме того как выводиться и отображаться. Теперь предстоит добавить обработчик клика на пункте подменю, чтобы можно было предпринять программно какое-нибудь действие в ответ на выбор пункта меню. В нашем примере нам нужно просто запомнить номер выбранного реле. Добавьте в определение класса Activity программы следующий метод: @Override public boolean onOptionsItemSelected(MenuItem item) { textDebug.append(item.getTitle()); // Обработка выбора пункта подменю. switch (item.getItemId()) { case R.id.relay000: relay = 0; return true; case R.id.relay001: relay = 1; return true; ... case R.id.relay029: relay = 29; return true; default: return super.onOptionsItemSelected(item); } } Принцип действия обработчика меню понятен. Оператор switch декодирует, какой пункт меню задействован, и соответственно присваивает переменной relay нужное значение. Примечание: имейте в виду, что onOptionsItemSelected будет срабатывать на нажатия всех пунктов меню и подменю (в том числе и при входе в главное меню, когда нажмете на пункт "Выбрать № реле". Код в обработчике должен это учитывать, и корректно обрабатывать клики в меню. Код можно сократить, если декодировать пункты меню без оператора switch, например по содержимому надписи Title. @Override public boolean onOptionsItemSelected(MenuItem item) { String title = item.getTitle().toString(); String[] separated = title.split(" "); if (separated[0].equals("Реле") && (2==separated.length)) { relay = Integer.parseInt(separated[1]); } return true; } [Ссылки] 1. Menus site:developer.android.com. |