Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Наполнение меню элементами
Мы определили меню с тремя элементами, но само определение элементов в файле еще не создает меню. Это всего лишь декларативное описание. Чтобы вывести его на экран, нам надо использовать его в классе Activity. Для этого надо переопределить метод onCreateOptionsMenu. Итак, перейдем к классу MainActivity и изменим его следующим образом: package com.example.eugene.menuapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); return true; }}Метод getMenuInflater получает объект MenuInflater и вызываем его метод inflate(). Этот метод в качестве первого параметра принимает ресурс, представляющий наше декларативное описание меню в xml, и наполняет им объект menu, переданный в качестве второго параметра. Запустим приложение по умолчанию и нажмем на кнопку меню в правом верхнем углу: Обработка нажатий в меню Если мы нажмем на любой из пунктов меню, то ничего не произойдет. Чтобы привязать к меню действия, нам надо переопределить в классе activity onOptionsItemSelected. Для вывода выбранного элемена меню в файле activity_main.xml определим текстовое поле с id=header: <? xml version=" 1.0" encoding=" utf-8"? > < RelativeLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: id=" @+id/activity_main" android: layout_width=" match_parent" android: layout_height=" match_parent" > < TextView android: id=" @+id/header" android: layout_width=" wrap_content" android: layout_height=" wrap_content" android: textSize=" 22sp" /> < /RelativeLayout>И изменим класс MainActivity: Чтобы понять, какой пункт меню выбран, вначале получаем его идентификатор int id = item.getItemId(). Затем пробегаемся в конструкции switch..case и выбираем нужный вариант и в зависимости от выбора производим определенные действия - в данном случае устанавливаем текст TextView. Группы, подменю и программное создание меню Создание подменю =" Переход" >< menu> Для создания подменю в файле разметки меню определим внутренний элемент menu: <? xml version=" 1.0" encoding=" utf-8"? > < menu xmlns: android=" http: //schemas.android.com/apk/res/android" > < item android: id=" @+id/action_settings" android: title=" Настройки" > < menu> < item android: id=" @+id/save_settings" android: title=" Сохранить" /> < item android: id=" @+id/open_settings" android: title=" Открыть" /> < /menu> < /item> < item android: id=" @+id/action_move" android: title < item android: id=" @+id/forward" android: title=" Вперед" /> < item android: id=" @+id/back" android: title=" Назад" /> < /menu> < /item> < /menu>После нажатия на меню отобразятся элементы верхнего уровня, по нажатию на которые мы можем перейти к подменю: Группы в меню Использование элемента group позволяет оформить элементы меню в группу: <? xml version=" 1.0" encoding=" utf-8"? > < menu xmlns: android=" http: //schemas.android.com/apk/res/android" > < group android: checkableBehavior=" single" > < item android: id=" @+id/action_settings" android: title=" Настройки" android: checked=" true" /> < item android: id=" @+id/save_settings" android: title=" Сохранить" /> < item android: id=" @+id/open_settings" android: title=" Открыть" /> < /group> < /menu>В определении группы мы можем установить атрибут android: checkableBehavior. Этот атрибут может принимать следующие значения: single(у каждого элемента создается радиокнопка), all (для каждого элемента создается флажок) и none. В данном случае для каждого элемента будет создаваться радиокнопка (визуально кружок). И для первого элемента устанавливается отмеченная радиокнопка (android: checked=" true" ). В файле разметки интерфейса activity_main.xml также пусть будет определено текстовое поле: <? xml version=" 1.0" encoding=" utf-8"? > < RelativeLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: id=" @+id/activity_main" android: layout_width=" match_parent" android: layout_height=" match_parent" > < TextView android: id=" @+id/header" android: layout_width=" wrap_content" android: layout_height=" wrap_content" android: textSize=" 22sp" /> < /RelativeLayout>А в классе MainActivity определим выделение радиокнопки у выбранного пункта меню: |
Последнее изменение этой страницы: 2019-05-04; Просмотров: 193; Нарушение авторского права страницы