Progmar Marcin Załęczny

Tworzenie i obsługa menu

W tej części tutoriala dowiesz się w jaki sposób tworzyć i oprogramować menu aplikacji. Najpierw utwórz nowy projekt:

Tworzenie nowego projektu

Menu główne aplikacji znajduje się w pliku zasobu res/menu/main.xml. Kliknij podwójnie w ten plik xml, żeby przejść do kreatora opcji menu:

Kreator menu

Dodamy teraz trzy pozycje menu: action_hello_world, action_how_are_you i action_byebye_world. W tym celu kliknij przycisk Add i w okienku tworzenia pozycji menu wybierz opcję Create a new element at the top level, in Menu oraz na liście typów zaznacz element Item:

Tworzenie pozycji menu

Kliknij przycisk OK. Zostanie dodana opcja item1. Operację powtórz dwukrotnie, żeby dodać pozycje item2 i item3. Teraz przystąpimy do edycji właściwości tych elementów. Ustaw je tak jak przedstawiono w poniższej tabeli:

item1 Id:     @+id/action_hello_world
Title: @string/action_hello_world
item2 Id:     @+id/action_how_are_you
Title: @string/action_how_are_you
item3 Id:     @+id/action_byebye_world
Title: @string/action_byebye_world

Słowo @+id/ oznacza, że nadajemy pozycji identyfikator i ten identyfikator powinien znaleźć się w klasie zasobów R. Słowo @string/ oznacza, że nadajemy wartość tekstowego zasobu o podanej nazwie.
Po tych operacjach nasze menu przyjmie następującą postać:

Kompletne menu

Teraz uzupełnimy zasoby tekstowe o podane wyżej nazwy: action_hello_world, action_how_are_you, action_byebye_world. W tym celu podwójnie kliknij plik res/values/strings.xml i przełącz się do pozycji strings.xml w dolnej zakładce edytora (obok pozycji Resources). Następnie wprowadź brakujące wpisy zgodnie z podanym niżej kodem źródłowym:


    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="app_name">menu-handling</string>
        <string name="action_settings">Ustawienia</string>
        <string name="action_hello_world">Witaj świecie</string>
        <string name="action_how_are_you">Jak się masz</string>
        <string name="action_byebye_world">Żegnaj świecie</string>
        <string name="hello_world">Witaj świecie!</string>
    </resources>

Menu i zasoby tekstowe mamy już gotowe, więc przystąpmy do oprogramowania menu w kodzie głównej aktywności. Podwójnie kliknij pozycję src/com.example.menu_handling/MainActivity.java w celu otworzenia kodu naszej aktywności w edytorze Eclipse. Zauważ, że znajduje się tam następująca metoda:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

Metoda ta odpowiada za dodanie utworzonych pozycji menu do menu aplikacji. Ponieważ nasze menu znajduje się w pliku main.xml, więc odwołujemy się w kodzie do niego przez zastosowanie konstrukcji R.menu.main. Gdybyśmy przykładowo utworzyli drugi zasób menu w pliku res/menu/secondary.xml, to odwoływlibyśmy się w kodzie do niego za pomocą R.menu.secondary.

Żeby obsłużyć kliknięcia w pozycje menu, musimy dodać następującą metodę:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                Toast.makeText(getApplicationContext(), "Ustawienia", Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_hello_world:
                Toast.makeText(getApplicationContext(), "Witaj świecie", Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_how_are_you:
                Toast.makeText(getApplicationContext(), "Jak się masz", Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_byebye_world:
                Toast.makeText(getApplicationContext(), "Żegnaj świecie", Toast.LENGTH_SHORT).show();
                break;
        }

        return true;
    }

Metoda ta jest wywoływana każdorazowo po kliknięciu w dowolną z opcji menu. Pobiera ona id klikniętej opcji przy pomocy wywołania item.getItemId() i w instrukcji switch wybiera właściwy identyfikator prezentując odpowiedni komunikat Toast.

Kompletny kod programu możesz pobrać tutaj: menu-handling.zip.