Статьи

Создание меню параметров в Android


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

  1. Меню настроек
  2. Контекстное меню
  3. Подменю

Меню Options  является тот , который появляется , когда пользователь нажимает кнопку меню на мобильном. Это то, что связано с деятельностью. В 3.0 и более поздних версиях это доступно в самой панели действий для быстрого доступа.

В этой статье я покажу, как создать меню параметров для устройств с Android 2.3 или ниже.

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

Подменю — это плавающий список пунктов меню, который появляется, когда пользователь касается элемента меню, содержащего вложенное меню.

Существует два способа создания меню параметров в вашем приложении. Один из них — создание экземпляра 
 класса Menu,
а другой — надувание Menu из ресурса меню XML. Основываясь на лучших практиках, всегда лучше определить Меню в XML и надуть его в своем коде.

Теперь давайте начнем с примера.

Я собираюсь просто определить 3 пункта меню в XML. Раздуйте это в моем коде. И когда пользователь нажимает на любой из пунктов меню, я просто 
отправляю
 сообщение о том, что было нажато.

ПРИМЕЧАНИЕ. Как обычно, это не очень полезная вещь, но, придерживаясь моего стиля, я хочу, чтобы она была максимально лаконичной и максимально простой, чтобы обучение было легким. И фокус только на том, какую концепцию мы пытаемся изучить.

Итак, вот мой 
options_menu.xml,
 который создается в 
 папке res / menu
:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/next"
android:icon="@drawable/ic_next"
android:title="@string/next" />
<item android:id="@+id/previous"
android:icon="@drawable/ic_previous"
android:title="@string/previous" />
<item android:id="@+id/list"
android:icon="@drawable/ic_list"
android:title="@string/list" />
</menu>

Вы видите , что 
меню
 корневого узел состоит из 3 
пункта
 листовых узлов. Каждый из 
элементов
 состоит из 
идентификатора

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

Выше , предполагает , что у вас есть три изображения 
ic_next, ic_previous 
и 
ic_list
 копируется в 
вытяжке
 папку. Само собой разумеется, что эти размеры изображения должны быть как можно меньше.
Как только это будет готово, мы создадим класс с именем 
ViewOptionsMenu. 
Этот 
метод onCreate (…)
 будет простым, вызывающим супер-метод и отображающим содержимое, как показано ниже.
    public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

В 
файле main.xml
 просто отображается сообщение: «
Нажмите на меню параметров, чтобы просмотреть доступные параметры меню
». Это сообщение согласно норме определено в 
 файле strings.xml,
который существует в 
 папке res / values
. Вот содержимое 
файла main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/welcome"
android:textSize="20sp" android:textStyle="bold" android:capitalize="none" android:typeface="sans"/>
</LinearLayout>

Теперь мне нужно переопределить метод:  
onCreateOptionsMenu (меню меню). 
Этот метод вызывается Android при первой загрузке действия. Это так для Android 2.3 и ниже. Вот код:

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

Этот метод получает дескриптор 
MenuInflater
 и использует его для раздувания меню опций, которое мы определили ранее в 
файле options_menu.xml
 в 
 папке res / menu
. Вот и все. Меню создано. Разве это не так просто?

Теперь, когда меню создано, как мы реагируем на пользователя, когда он нажимает на меню. Это делается путем переопределения 
метода onOptionsItemSelected (элемент MenuItem)
 в самой операции, как показано ниже:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.next:
Toast.makeText(this, "You have chosen the " + getResources().getString(R.string.next) + " menu option",
Toast.LENGTH_SHORT).show();
return true;

default:
return super.onOptionsItemSelected(item);
}


Здесь система Android вызывает этот метод, передавая дескриптор 
MenuItem, по
 которому щелкнул пользователь. Таким образом, в этом методе я проверяю, какой элемент был
нажат, извлекая
идентификатор элемента с помощью  item.getItemId ().   Затем я использую 
 оператор switch
для выполнения действий на основе 
идентификатора
. Если 
выбран файл R.id.next
 , то мы сообщаем, что выбрана опция меню «Далее». В реальных приложениях именно здесь вы можете вызывать соответствующий метод, который должен действовать в соответствии с выбранным меню.

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


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

Все меню параметров работает немного по-другому для Android 3.0 и выше.

И если вы хотите изменить параметры меню, во время выполнения вы должны переопределить метод  onPrepareMenuOptions ()  . Это вызывается Android каждый раз, когда пользователь нажимает на меню. Это полезно для включения, отключения, добавления или удаления пунктов меню в зависимости от текущего состояния вашего приложения.