Как создать свое меню для Android приложения?

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

Шаг 0: Android Studio в действии

Решил я начать использовать Android Studio 0.3.2 все же прошло уже не мало времени с момента релиза. Так вот этот урок будет в Android Studio 0.3.2 вот ссылка на студию: http://developer.android.com/sdk/installing/studio.html

 

Шаг 1: Создаем проект

Запускаем студию и нажимаем Create New Project:

Как видите мы настроили, что Minimum required SDK = Android 2.2 — это значит, что приложение будет работать начиная с Android 2.2 и на самой новой на данный момент Android 4.4

 

Шаг 2: Разбор стандартного проекта

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

Если запустить только что созданный проект, то вы увидите, что он имеет такое меню:

Именно вместо Settings мы научимся добавлять свои элементы.

Давате разберемся как же это меню там появилось.

Вот структура проекта:

Как вы видите в папке res есть папка menu — она предназначена для хранинение XML-дескрипторов меню.

 

Шаг 3: Создаем меню

Теперь давайте создадим свое меню.

Для начало создайте папку menu в папке res если её у вас нет.

А теперь создадим в этой папке файл main.xml со следующим содержимым:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity" >

    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        app:showAsAction="never" />
</menu>

Как можно увидеть в примере высше, то там есть элемент item идавай разберем его атрибуты:

android:title — это тот текст, который будет отображаться пользователю. В нашем случае — это Settings.

android:orderInCategory — указывает позицию в списке меню, так как там указанно 100, то скорее всего он всегда будет последним.

app:showAsAction — говорит как будет отображаться элемент. Может принимать следующие значения:

always — всегда будет виден, если места не хватает, заголовок будет показан не полностью;
ifRoom — будет виден, только если для него есть место;
never — элемент никогда не будет виден, для того чтобы его увидеть нужно раскрыть Меню.;
withText -будет показываться только с его заголовком;
collapseActionView — может сворачиваться в кнопку или разворачиваться на всю ширину ActionBar по нажатию;

В нашем примере используется never поэтому мы видим Settings, когда раскрываем меню.

 

Шаг 4: Добавляем меню в приложение

Для этого в главной активности, в моем случае это MainActivity.java нужно унаследоваться от ActionBarActivity и  переопределить метод onCreateOptionsMenu(Menu menu):

package com.devcolibri.myfirstmenu;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;

public class MainActivity extends ActionBarActivity {

    @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);
        return true;
    }

}

В строке 16 мы переопределили этот метод и на 17-й строке мы указываем наше меню. Обратите внимение, что R.menu.main — это имя файла что мы создали в шаге 3 main.xml.

После этого мы увидим наше меню.

 

Шаг 5: Добавляем новый элемент и действие на него

Я добавил новый элемен в main.xml меню:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity" >

    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        app:showAsAction="never" />

    <item android:id="@+id/action_my_item"
        android:title="@string/action_my_item"
        android:orderInCategory="100"
        app:showAsAction="never" />
</menu>

Теперь меню выглядит так:

Теперь давайте добавим обработчик на эти пункты меню, для это зайходим в наше MainActivity и переопределяем метод onOptionsItemSelected(MenuItem item):

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            Toast.makeText(getApplicationContext(),
                    "You selected Settings", Toast.LENGTH_LONG).show();
            return true;

        case R.id.action_my_item:
            Toast.makeText(getApplicationContext(),
                    "You selected My Item", Toast.LENGTH_LONG).show();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

После этого на нажатие по пунктам меню мы будем выводит сообщение.

 

Шаг 6: Запуск и проверка меню

Давайте запустим и проверим наше меню:

Урок создан: 06 ноября 2013 | Просмотров: 28426 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 08 ноября 2013 в 13:53

    Akramjon

    Спасибо за хорошие обьяснения

    • 11 июля 2014 в 18:10

      Voltron

      где выход из приложения?)

  • 01 мая 2015 в 18:39

    Азиз

    Здорова! Удачи с уроками! А можешь отдельно урок снять как делать боковое меню, свайп кажись еще называется.В интернет много реализаций, но хотел бы с твоими пояснениями.

  • 28 мая 2015 в 15:44

    Ярослав

    «Если запустить только что созданный проект, то вы увидите, что он имеет такое меню:» странно, но при запуске нового проекта нет этой кнопки. Что я делаю не так?

    • 28 мая 2015 в 15:51

      Ярослав

      разобрался. Спасибо)

  • 24 июня 2015 в 00:35

    AlSaint

    вопрос на засыпку, если я не использую готовый тулбар или как его обзывают ActionBar, а использую кастомный Toolbar работа по созданию меню не отличается от вышеизложенного или есть свои моменты? У меня не отображается меню хотя атрибут ShowAsAction выставлен always.

  • 21 июля 2015 в 01:03

    Костя

    Спасибо, это то, что я искал :)

  • 04 июня 2016 в 09:59

    Куаныш

    спс

  • 29 августа 2016 в 15:56

    Sagamore

    Не пойму, что я делаю не так: ни в предпросмотре, ни после запуска приложения меню не появляется. Я даже уже код не набираю, а тупо копипащу.

    • 18 марта 2017 в 11:25

      Angel

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