2017年1月8日日曜日

Android メニューの使い方

目次へ



基本的なことですが、Androidでメニューを作成し、メニューが選択された時の処理を作成する方法をまとめておきます。
  • onCreateOptionsMenu(Menu menu) がメニュー生成のためのメソッド
  • MenuInflater クラスがメニューを作成するためのクラス
  • onOptionsItemSelected(MenuItem item) がメニューが選択された時に呼ばれるメソッド


■■■■メニュー生成のためのメソッド

Android端末のメニューボタンを押すと画面にポップアップして現れるメニューをオプションメニューと言います。
オプションメニューは、ActivityクラスのonCreateOptionsMenuというメソッドをオーバーライドして作成します。
これは、AndroidStudioでBlank Activityなどを指定してプロジェクトを作成すると、MainActivityクラスに、作成されているものです。
Activityが作成され、オプションメニューを作成する段階になると、自動的にこのメソッドが実行され、メニューの組み込みが行われます。


■■■■MenuInflater

実際にメニュー項目を登録するには、MenuInflaterクラスを使います。
・Activityが持つgetMenuInflater()を使ってMenuInflaterオブジェクトの取得
MenuInflater menuInflater = getMenuInflater();
・メニューの生成
menuInflater.inflate(メニューのリソース,Menuのインスタンス);
・メニュー項目を追加するなら
Menuのインスタンス.add("aaa");


onCreateOptionsMenuメソッドの中で書くなら次のようになります。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    menu.add("aaa");
    return true;
}



res/menu/menu_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="com.example.yoko.myapplication.MainActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"       ※
        android:title="@string/action_settings"
        app:showAsAction="never" />       ※
</menu>


これで、メニューボタンを押すと下のように表示されます。
※menu_main.xmlのandroid:orderInCategoryはメニューの並びに関する値で、設定された値に従って、表示されます。
この値が小さければ最小の方に、大きければ最後の方に並べられます。

※menu_main.xmlのapp:showAsActionはアクションバーでのメニューの表示に関するものです。
アクションバーは画面の幅が広い時には重要なメニューをボタンとして表示します。
app:showAsActionはボタンとして表示するかどうかを指定するもので以下のような値が設定できますが、上では、neverとして、ボタンとして表示しないようにしています。
never 表示しない
ifRoom 表示できるならする
withText テキストも一緒に表示する
always 常に表示する
collapseActionView ActionViewを表示するときに使う


もし、alwaysとすると、次のようにSettingsというボタンがメニューボタンの横に表示されます。



■■■■メニューが選択された時に呼ばれるメソッド

表示されたメニューをユーザが選ぶとonOptionsItemSelectedというメソッドが呼び出されます。
引数選択されたMenuItemのインスタンスが渡されますので、それによって必要な処理を書きます。
下の例では、aaaというMenuItemが選択された時にトーストを表示しています。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if("aaa".equals(item.getTitle())) {
        Toast toast = Toast.makeText(this,"aaaが選択されました",Toast.LENGTH_SHORT);
        toast.show();
    }
    return super.onOptionsItemSelected(item);
}



にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

0 件のコメント:

コメントを投稿