Action Barにオプションメニューを表示するまでは「Action Barにオプションメニューを表示する」を参照してください。ここでは、そこからの差分を説明します。
サブメニューを表示するには、ActionProviderクラスを使用します。このクラスを継承してユーザー独自のクラスを作ることでオリジナルのサブメニューが表示できます。
まずはオプションメニューからサブメニューを呼び出します。呼び出すには"actionProviderClass"属性にクラス名を設定します。これでこのメニューアイテムが選択されると、このクラスを呼び出します。
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:showAsAction="ifRoom|collapseActionView" android:icon="@android:drawable/ic_menu_search" android:actionViewClass="android.widget.SearchView"></item> <item android:id="@+id/item2" android:icon="@android:drawable/ic_menu_share" android:showAsAction="ifRoom" android:actionProviderClass="jp.myapp.sample.SampleActionProvider"></item> <item android:id="@+id/item3" android:title="@string/menu3" android:showAsAction="ifRoom"></item> <item android:id="@+id/item4" android:title="@string/menu4" android:showAsAction="ifRoom"></item> </menu>
呼び出し先のActionProviderクラスを作成します。後でViewを作成するためにコンストラクタでcontextを保存しておくのが通例です。onCreateActionViewではViewを返す必要はなくnullで構いません。サブメニューがあることを伝えるためにhasSunMenu()ではtrueを返します。メニュー表示のたびにonPrepareSubMenu()が呼ばれるので、そこでサブメニューを作成します。この例ではxmlで作ったmenuリソースをセットし、それをクリックしたときのリスナーを自分自身になるようにしています(onMenuItemClick()が呼ばれます)。
public class SampleActionProvider extends ActionProvider implements OnMenuItemClickListener { private final static String TAB = "SampleActionProvider"; private Context mContext; public SampleActionProvider(Context context) { super(context); mContext = context; } @Override public View onCreateActionView() { return null; } @Override public boolean hasSubMenu() { return true; } @Override public void onPrepareSubMenu(SubMenu subMenu) { subMenu.clear(); MenuInflater inflator = new MenuInflater(mContext); inflator.inflate(R.menu.provider_menu, subMenu); for (int i = 0; i < subMenu.size(); ++i) { subMenu.getItem(i).setOnMenuItemClickListener(this); } } @Override public boolean onMenuItemClick(MenuItem item) { Log.i(TAB, "Title:" + item.getTitle()); return true; } }
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:title="@string/menu1" android:icon="@android:drawable/ic_menu_compass"></item> <item android:id="@+id/item2" android:title="@string/menu2" android:icon="@android:drawable/ic_menu_camera"></item> </menu>
実行すると下記のようになります。Action Barのオプションメニューの2番目のShareアイコンのボタンを押すとサブメニューが現れます。
No comments:
Post a Comment