Android

Android オプションメニュー 【Android TIPS】

Posted 1月 28 2013 by Teachers  , ,

Androidアプリケーションにおけるメニューのひとつ、オプションメニューの作り方を紹介します。

 

オプションメニューはMenuボタンを押下したときに表示されるメニューです。

アイコンメニューと拡張メニューが存在し、拡張メニューは選択肢が7個以上になった場合に表示されるメニューのことです。

 

選択肢が6個の場合 ( アイコンメニュー )

図1

 

選択肢が7個の場合 ( アイコンメニュー + 拡張メニュー )

図2図3

 

 

メニューを作成するはActivity#onCreateOptionsMenu()メソッドを使用します。

このメソッドはActivityから最初に起動されるときに呼びだされ、このメソッド内でオプションメニューを作成します。

表示されるメニュー内容は ( アイコンやメニュー名など ) はMenu#add()メソッドをして追加します。( MenuオブジェクトはonCreateOptionsMenu()メソッドの引数を使用します。 )

 

Activity#onCreateOptionsMenu()のシグネチャ

public boolean onCreateOptionsMenu (Menu menu)

 

Menu#add()のシグネチャ

MenuItem add(int groupId, int itemId, int order, CharSequence title)

 

データ型 引数名 概要
int groupId

メニューをグループ化したいときに利用するID

(グループ単位で表示/非表示、有効/無効などを切り替え可能)

int itemId メニューを一意に特定するためのID(どのメニューが選択されたかを判断する)
int order 表示順序
CharSequence title メニューの表示名

 

※CharSequence※

第4引数のデータ型がCharSequenceとなっています。

これはインタフェースで、文字列を表すStringやStringBufferクラスが実装しているインタフェースとなっています。

Stringオブジェクトをそのまま渡すことができますので、よくわからない方はStringのようなものだと覚えておけばよいでしょう。

 

このメニューの作り方のポイントは、基本的に1つのActivityに対して1つのオプションメニューしか対応できないということです。

つまり、動的なメニュー ( Activityの状態に応じて表示するメニューを切り替える ) には対応していません。

動的なメニューを作成したい場合は、Activity#OnPrepareOptionsMenu()を使う必要があります。

 

次に、ユーザーがオプションメニューをクリックした際の動作を定義する方法です。

Activity#onOptionsItemSelected()メソッドにクリックされた時に実行する処理を記述します。

メソッドの引数にはクリックされたアイテムを表すMenuItemオブジェクトが渡され、getGroupId()やgetItemId()によりどのアイテムがクリックされたか判断できるようになっています。

 

Activity#onOptionsItemSelected()のシグネチャ

public boolean onOptionsItemSelected (MenuItem item)

 

 

簡単なオプションメニューのサンプルを紹介します。

オプションメニューをクリックすると、Toastが表示するシンプルなプログラムです。

図4x

 

public class MainActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, 0, 0, "メニュー1").setIcon(R.drawable.ic_launcher);
        menu.add(0, 10, 1, "メニュー2");
        menu.add(0, 20, 2, "メニュー3");
        menu.add(0, 30, 3, "メニュー4");
        menu.add(0, 40, 4, "メニュー5");
        menu.add(0, 50, 5, "メニュー6");
        menu.add(0, 60, 5, "メニュー7");
 
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 0 :
                Toast.makeText(this, "メニュー1がクリックされました", Toast.LENGTH_SHORT).show();
                return true;
 
            case 10 :
                Toast.makeText(this, "メニュー2がクリックされました", Toast.LENGTH_SHORT).show();
                return true;
 
            default :
                Toast.makeText(this, "オプションメニューがクリックされました", Toast.LENGTH_SHORT).show();
                return super.onOptionsItemSelected(item);
        }
    }
 
}


Android TIPS



  未経験OKの仕事 |  上場企業の仕事 |  高待遇の仕事 |  外資系の仕事 |  社内SEで検索 |  自社サービスで検索





メールアドレス
ご質問・問い合わせ等、ご自由にお書きください。