コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Androidアプリ入門 No.30 オプションメニューの基本

オプションメニュー

オプションメニューの基本

まずは、単純にメニューを表示する。主な属性は以下となる。

引数 説明
title メニューのタイトル。
icon メニューのアイコン。タイトルとの兵器も可能。

メニューの定義はres/menuフォルダに置く。今回は、res/menu/option_menu.xmlファイルを以下のように作成する。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:title="1番"
        android:icon="@drawable/ret"
        />
    <item android:title="2番" />
    <item android:title="3番" />
    <item android:title="4番" />
    <item android:title="5番" />
</menu>

1番〜5番のメニューがあり、1番だけアイコンを使用している。アイコンは以下のファイル。今までと同様に、解像度別にdrawable-ldpi、drawable-mdpi、drawable-hdpiにファイルを置く。ファイル名はret.pngとする。ちなみに透過pngにしてある。

main.xmlは以下。main.xmlでは特別なことはしていない。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="メニューのテスト"
        />
</LinearLayout>

最後にMainActivity.javaを以下に示す。

package sample.at;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.option_menu, menu);

        return true;
    }
}

実行結果は以下のようになる。メニューボタンを押すとメニューが表示される。レイアウトは、アイテムの数に応じて自動で調整される。

オプショントメニューを表示するには、onCreateOptionsMenuメソッドをオーバーライドする。メソッドの定義は以下のようになっている。

public boolean onCreateOptionsMenu(Menu menu)

引数は以下。

引数 説明
menu メニューアイテムを設定するメニュー。

引数のmenuに実際のメニューアイテムを設定する。それは、次のMenuInflater#inflateで行っている。inflateの定義は以下。

public void inflate (int menuRes, Menu menu)
||>
引数は以下。
|*引数|*説明|
|menuRes|読み込むXMLのレイアウトのリソースID。|
|menu|このmenuにリソースのメニューを追加する。|

ここで、メニューを6つ以上にしてみる。たとえば10個にする。option_menu.xmlを以下のようにする。
>|xml|
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:title="1番"
        android:icon="@drawable/ret"
        />
    <item android:title="2番" />
    <item android:title="3番" />
    <item android:title="4番" />
    <item android:title="5番" />
    <item android:title="6番" />
    <item android:title="7番" />
    <item android:title="8番" />
    <item android:title="9番" />
    <item android:title="10番" />
</menu>

実行結果は以下。メニューボタンを押すと6番目の欄に「その他」のアイコンが自動で表示される。

その他ボタンを押すと、以下のように6番以降がメニューで表示される。