Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Наполнение меню элементами



Мы определили меню с тремя элементами, но само определение элементов в файле еще не создает меню. Это всего лишь декларативное описание. Чтобы вывести его на экран, нам надо использовать его в классе 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:

package com.example.eugene.menuapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; 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; } @Override public boolean onOptionsItemSelected(MenuItem item) {   int id = item.getItemId();    TextView headerView = (TextView) findViewById(R.id.header);    switch(id){       case R.id.action_settings:            headerView.setText(" Настройки" );            return true;        case R.id.open_settings:            headerView.setText(" Открыть" );            return true;        case R.id.save_settings:              headerView.setText(" Сохранить" );            return true;    }   return super.onOptionsItemSelected(item); }}

Чтобы понять, какой пункт меню выбран, вначале получаем его идентификатор 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 определим выделение радиокнопки у выбранного пункта меню:

package com.example.eugene.menuapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; 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; } @Override public boolean onOptionsItemSelected(MenuItem item) {   int id = item.getItemId();    TextView headerView = (TextView) findViewById(R.id.header);    if(! item.isChecked()) item.setChecked(true);    switch(id){       case R.id.action_settings:            headerView.setText(" Настройки" );            return true;        case R.id.open_settings:            headerView.setText(" Открыть" );            return true;        case R.id.save_settings:            headerView.setText(" Сохранить" );            return true;    }   return super.onOptionsItemSelected(item); }}


Поделиться:



Последнее изменение этой страницы: 2019-05-04; Просмотров: 193; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.008 с.)
Главная | Случайная страница | Обратная связь