2013年11月12日火曜日

メニューの表示(onCreateOptionsMenu())

Androidの特徴の一つであるメニューボタン。
iPhoneにはないAndroid特有のボタンです。
iPhoneだと、画面のどこかに設定ボタンとか作らないとダメですが、
Androidだと、このメニューボタンを実装すればいいので、わりと楽です。

メニューボタンの生成

@Override
public boolean onCreateOptionsMenu(Menu menu) {
}

Acticvityを継承していれば使えます。
このメソッドの中でメニューを作っていきます。

Menu.add(int, int, int, String);
          groupid, 識別ID, ボタン配置優先順位, ボタン名

addした数だけ、メニューにボタンが配置されます。
レイアウトは勝手に作ってくれるので、わりと簡単で便利です。

■サンプルソース
package com.example.manifest;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {
    //どのボタンが押されたかの識別用ID
    private final int Menu1 = Menu.FIRST;
    private final int Menu2 = Menu.FIRST + 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //適当にレイアウトを作成
        LinearLayout oLayout = new LinearLayout(this);
        setContentView(oLayout);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // メニューアイテムを追加します
        menu.add(Menu.NONE, Menu1, Menu.NONE, "メニュー1").setIcon(R.drawable.ic_launcher);
        menu.add(Menu.NONE, Menu2, Menu.NONE, "メニュー2");
        return super.onCreateOptionsMenu(menu);
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case Menu1:
                Toast.makeText(getApplicationContext(), "Menu1", Toast.LENGTH_SHORT).show();
                return true;
            case Menu2:
                Toast.makeText(getApplicationContext(), "Menu2", Toast.LENGTH_SHORT).show();
                return true;
        }
        return false;
    }

    //メニューボタンを押される度に呼ばれる
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        Log.d("メニュー","押された");
        return true;
    }

    //メニューが消える度に呼ばれる  
    @Override
    public void onOptionsMenuClosed (Menu menu) {
        super.onPrepareOptionsMenu(menu);
        Log.d("メニュー","閉じられた");
    }
}

■実行結果




メニュー画面が開くタイミングや閉じるタイミングのOverrideが既にあるのが、とても便利です。
また、サンプルソースで使っている定数ですが、
Menu.NONEが0
Menu.FIRSTが1
です。



0 件のコメント:

コメントを投稿