Практически каждому приложению потребуется меню, чтобы пользователь мог выполнять действия над ним. В Android существует три типа меню.
- Меню настроек
- Контекстное меню
- Подменю
Меню Options является тот , который появляется , когда пользователь нажимает кнопку меню на мобильном. Это то, что связано с деятельностью. В 3.0 и более поздних версиях это доступно в самой панели действий для быстрого доступа.
В этой статье я покажу, как создать меню параметров для устройств с Android 2.3 или ниже.
Контекстное меню представляет собой плавучее список пунктов меню , которое появляется , когда пользователь прикасается и имеет конкретный элемент , отображаемый в окне, которое имеет меню , связанное с ним.
Подменю — это плавающий список пунктов меню, который появляется, когда пользователь касается элемента меню, содержащего вложенное меню.
Существует два способа создания меню параметров в вашем приложении. Один из них — создание экземпляра
класса Menu,
а другой — надувание Menu из ресурса меню XML. Основываясь на лучших практиках, всегда лучше определить Меню в XML и надуть его в своем коде.
класса Menu,
а другой — надувание Menu из ресурса меню XML. Основываясь на лучших практиках, всегда лучше определить Меню в XML и надуть его в своем коде.
Теперь давайте начнем с примера.
Я собираюсь просто определить 3 пункта меню в XML. Раздуйте это в моем коде. И когда пользователь нажимает на любой из пунктов меню, я просто
отправляю
сообщение о том, что было нажато.
отправляю
сообщение о том, что было нажато.
ПРИМЕЧАНИЕ. Как обычно, это не очень полезная вещь, но, придерживаясь моего стиля, я хочу, чтобы она была максимально лаконичной и максимально простой, чтобы обучение было легким. И фокус только на том, какую концепцию мы пытаемся изучить.
Итак, вот мой
options_menu.xml,
который создается в
папке res / menu
:
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
пункта
листовых узлов. Каждый из
элементов
состоит из
идентификатора
,
значка
и
заголовка
. Ресурс
идентификатор
является уникальным для этого
элемента
и позволяет приложению распознавать , какой элемент был щелкнул пользователем.
Значок
является вытяжкой , которая должна существовать в
Резе / вытяжке
папки и показанный в пункте меню.
Строка
является заголовком элемента.
меню
корневого узел состоит из 3
пункта
листовых узлов. Каждый из
элементов
состоит из
идентификатора
,
значка
и
заголовка
. Ресурс
идентификатор
является уникальным для этого
элемента
и позволяет приложению распознавать , какой элемент был щелкнул пользователем.
Значок
является вытяжкой , которая должна существовать в
Резе / вытяжке
папки и показанный в пункте меню.
Строка
является заголовком элемента.
Выше , предполагает , что у вас есть три изображения
ic_next, ic_previous
и
ic_list
копируется в
вытяжке
папку. Само собой разумеется, что эти размеры изображения должны быть как можно меньше.
ic_next, ic_previous
и
ic_list
копируется в
вытяжке
папку. Само собой разумеется, что эти размеры изображения должны быть как можно меньше.
Как только это будет готово, мы создадим класс с именем
ViewOptionsMenu.
Этот
метод onCreate (…)
будет простым, вызывающим супер-метод и отображающим содержимое, как показано ниже.
ViewOptionsMenu.
Этот
метод onCreate (…)
будет простым, вызывающим супер-метод и отображающим содержимое, как показано ниже.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
В
файле main.xml
просто отображается сообщение: «
Нажмите на меню параметров, чтобы просмотреть доступные параметры меню
». Это сообщение согласно норме определено в
файле strings.xml,
который существует в
папке res / values
. Вот содержимое
файла main.xml
файле 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 и ниже. Вот код:
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
. Вот и все. Меню создано. Разве это не так просто?
MenuInflater
и использует его для раздувания меню опций, которое мы определили ранее в
файле options_menu.xml
в
папке res / menu
. Вот и все. Меню создано. Разве это не так просто?
Теперь, когда меню создано, как мы реагируем на пользователя, когда он нажимает на меню. Это делается путем переопределения
метода onOptionsItemSelected (элемент MenuItem)
в самой операции, как показано ниже:
метода 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
, то мы сообщаем, что выбрана опция меню «Далее». В реальных приложениях именно здесь вы можете вызывать соответствующий метод, который должен действовать в соответствии с выбранным меню.
MenuItem, по
которому щелкнул пользователь. Таким образом, в этом методе я проверяю, какой элемент был
нажат, извлекая
идентификатор элемента с помощью item.getItemId (). Затем я использую
оператор switch
для выполнения действий на основе
идентификатора
. Если
выбран файл R.id.next
, то мы сообщаем, что выбрана опция меню «Далее». В реальных приложениях именно здесь вы можете вызывать соответствующий метод, который должен действовать в соответствии с выбранным меню.
Точно так же я тост сообщений для «предыдущего», а также «список» меню. Полный код можно скачать здесь.
Смотрите изображения ниже, чтобы увидеть, как появляется меню опций
и что происходит, когда вы нажимаете на меню параметров:
Все меню параметров работает немного по-другому для Android 3.0 и выше.
И если вы хотите изменить параметры меню, во время выполнения вы должны переопределить метод onPrepareMenuOptions () . Это вызывается Android каждый раз, когда пользователь нажимает на меню. Это полезно для включения, отключения, добавления или удаления пунктов меню в зависимости от текущего состояния вашего приложения.