Статьи

Создание меню в Android с использованием Java и XML: введение

Пользователи приложений любят мощные опции и функции, но если они не очень хорошо организованы в интерфейсе вашего приложения, они могут даже не существовать. В зависимости от того, что вы создали, эти параметры и функции могут влиять на поведение приложения, они могут предлагать широкие возможности настройки или даже привязываться к API, другим приложениям, аппаратным возможностям или другим внешним технологиям. Но они должны быть интуитивно понятными и организованными, чтобы быть в своих лучших проявлениях. Вот где правильный дизайн меню приходит.

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

Пункты меню — очень старая и известная сущность пользовательского интерфейса. Почти всем пользователям удобно использовать меню в своих приложениях. Android предоставляет простую и гибкую инфраструктуру для добавления меню в ваше приложение. Это позволяет создавать меню с помощью ресурсов XML или напрямую с помощью кода. Основываясь на выбранном пункте меню, ваше приложение может выполнить определенное действие. В этой статье мы увидим, как мы можем легко создавать меню и реагировать на меню с помощью Android API.

Создание меню с использованием XML

Начнем с создания проекта Android под названием MenuOptionsDemoProject, в котором мы собираемся продемонстрировать создание меню с помощью XML. Как только мы создали проект и создали действие в MenuOptionsDemoProject, мы готовы добавить в него меню.

Одним из способов создания меню параметров в Android является использование файла ресурсов menu.xml. Чтобы создать меню с помощью этого метода, вы должны создать каталог меню в вашем каталоге ресурсов. Создайте файл с именем my_menu.xml. Ваша структура каталогов должна выглядеть следующим образом:

image001

Как только вы создали структуру файла выше, вы можете добавить следующий код в ваш файл my_menu.xml:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/open" android:icon="@drawable/openicon"

android:title="Open the file" />

<item android:id="@+id/save"

android:icon="@drawable/saveicon"

android:title="Save the file" />

</menu>

Чтобы создать ресурс меню, вы должны использовать тег <menu>. Вы должны создать этот тег элемента XML для каждого элемента меню, который вы хотите отобразить в вашем меню. В теге <menu> XML можно указать множество атрибутов. Некоторые из наиболее важных из них — это идентификатор элемента и тег заголовка , который определяет текст, отображаемый в пункте меню. Вы также можете указать значок для элемента <menu>, чтобы определить графику, визуально связанную с соответствующей опцией меню.

В приведенном выше XML-коде мы создали два пункта меню: один для открытия файла и один для сохранения файла. Мы дали названия обоим предметам, а также каждому значку.

Когда файл ресурсов меню (my_menu.xml) готов и содержит все элементы, которые вы собираетесь добавить, вы можете использовать MenuInflater для переопределения функции onCreateOptionsMenu. Предполагается, что эта функция заполняет объект меню необходимыми элементами меню, но класс Android MenuInflater помогает вам создавать элементы меню из ресурса XML, упомянутого выше. Код нашей деятельности будет следующим:

[sourcecode language = ”java”]

импорт android.app.Activity;

импорт android.os.Bundle;

импорт android.view.Menu;

импорт android.view.MenuInflater;

открытый класс MenuOptionsDemoProject extends Activity {

/ ** Вызывается при первом создании действия. * /

@Override

public void onCreate (BundlevedInstanceState) {

super.onCreate (savedInstanceState);

setContentView (R.layout.main);

}

@Override

public boolean onCreateOptionsMenu (Меню меню) {

MenuInflater inflater = getMenuInflater ();

inflater.inflate (R.menu.my_menu, меню);

вернуть истину;

}

}

[/исходный код]

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

2

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

3

Создание подменю с использованием XML

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

Нам нужно обновить наш файл my_menu.xml, чтобы добавить подменю. Ниже приведен модифицированный файл XML:

 <?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/open"

android:icon="@drawable/openicon"

android:title="Open the file" />

<item android:id="@+id/save"  android:icon="@drawable/saveicon"   android:title="Save the file">

<menu>

<item android:id="@+id/savecurrent"

android:title="Save Current file" />

<item android:id="@+id/saveall"

android:title="Save All Files" />

</menu>

</item>

<item android:id="@+id/close" android:title="Close the file" android:icon="@drawable/closeicon">

<menu>

<item android:id="@+id/closecurrent"

android:title="Close Current file" />

<item android:id="@+id/closeall"

android:title="Close All Files" />

</menu>

</item>

</menu>

В приведенном выше XML вы можете добавить вложенный тег <menu> для создания подменю. В недавно измененные данные XML мы добавили теги меню в оба исходных пункта меню.

Наш код в onCreateOptionsMenu не потребует никаких изменений, поскольку MenuInflater будет использовать только что обновленный XML. Это дает нам возможность быстро и легко создавать многоуровневые пункты меню Android с помощью простых тегов XML.

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

4

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

5

Выполнение действий в пунктах меню

Теперь, когда мы завершили наше меню, мы должны написать код для ответа на все возможные варианты меню. Всякий раз, когда в меню параметров действия Android выбирается элемент меню, вызывается функция действия onOptionsItemSelected. Чтобы ответить на выбор меню, мы должны переопределить эту функцию в нашей деятельности.

Код для onOptionsItemSelected выглядит следующим образом:

[sourcecode language = ”java”]

@Override

public boolean onOptionsItemSelected (элемент MenuItem) {

switch (item.getItemId ()) {

case R.id.open:

showToast («Открыть нажал»);

вернуть истину;

case R.id.savecurrent:

showToast («Сохранить текущий клик»);

вернуть истину;

case R.id.saveall:

showToast («Сохранить все по клику»);

вернуть истину;

case R.id.closecurrent:

showToast («Закрыть текущее нажатие»);

вернуть истину;

case R.id.closeall:

showToast («Закрыть все нажал»);

вернуть истину;

дефолт:

return super.onOptionsItemSelected (item);

}

}

public void showToast (Строковое сообщение)

{

Toast toast = Toast.makeText (getApplicationContext (), сообщение, Toast.LENGTH_SHORT);

toast.show ();

}

[/исходный код]

В приведенном выше коде выбранный пункт меню передается функции onOptionsItemSelected. Затем, используя функцию getItemId в пункте меню, мы можем узнать, какой пункт меню был выбран.

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

Таким образом, в случае выбора пункта меню «Закрыть все», теперь мы должны увидеть следующее сообщение:

6

Создание меню с помощью кода

Если по какой-то причине вы не можете создать меню с использованием XML, вы можете также добавить пункты меню через сам код. Предположим, мы хотим добавить те же три пункта меню («открыть файл», «сохранить файл», «закрыть файл») с помощью кода. Нам нужно будет написать код нашей функции onCreateOptionsMenu следующим образом:

[sourcecode language = ”java”]

@Override

public boolean onCreateOptionsMenu (Меню меню) {

menu.add (1, 1, 0, «Открыть файл»);

menu.add (1, 2, 1, «Сохранить файл»);

menu.add (1, 3, 2, «Закрыть файл»);

вернуть истину;

}

[/исходный код]

Теперь наша функция onCreateOptionsMenu имеет объект меню, который мы можем использовать для создания нужного меню. В функции add вам нужно будет передать groupid , itemid , order и title в качестве аргументов. После того, как мы внесли изменения и запустили действие, меню должно выглядеть следующим образом:

7

Вывод

В этой статье мы увидели, что в Android мы можем легко создавать меню, используя два разных метода. Меню могут быть определены как ресурсы в файлах XML, что позволяет нам очень легко изменять пункты меню при необходимости. При необходимости мы также можем создавать подменю на основе типов опций, которые мы хотим предоставить в нашем приложении для Android. Если создание меню в XML не подходит, вы можете вместо этого добавить пункты меню в Java. Предоставление опций и настроек пользователю в вашем Android-приложении абсолютно необходимо, если вы хотите создать полезное Android-приложение.

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