一、Android提供瞭一些簡單的方法來為應用添加Menu菜單。
提供瞭三種類型應用菜單:
1、Options Menu:通過Menu按鈕調用菜單
2、Context Menu:通過長按屏幕,調用註冊瞭的上下文菜單
3、Submenu:通過觸摸Menu Item,調用子菜單選項
二、下面通過案例,來介紹如何定義Menu菜單、處理選項事件。
1、在/res/目錄下新建menu文件夾,用於存儲Menu XML資源文件
2、在/res/menu/下新建menu1.xml菜單界面描述文件
[html] <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu1" android:title="菜單1" />
<item android:id="@+id/menu2" android:title="菜單2" />
</menu>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu1" android:title="菜單1" />
<item android:id="@+id/menu2" android:title="菜單2" />
</menu>
3、顯示菜單,需重寫Activity中onCreateOptionsMenu(Menu menu)方法
[java] @Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu1, menu);//調用第二步中定義的Menu界面描述文件
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu1, menu);//調用第二步中定義的Menu界面描述文件
return true;
}onCreateOptionsMenu,當用戶觸擊Menu按鈕時,會調用這個方法。
4、設置“菜單1”、“菜單2”的選中事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show();
return super.onOptionsItemSelected(item);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show();
return super.onOptionsItemSelected(item);
}這裡將每次選中的選項ID顯示在屏幕上。
5、重寫Activity中onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo)
[java] @Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu1, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu1, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
之後當用戶長按屏幕時,將會顯示菜單項。
6、設置上下文菜單選項的選中事件
[java] @Override
public boolean onContextItemSelected(MenuItem item){
Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show();
return super.onContextItemSelected(item);
}
@Override
public boolean onContextItemSelected(MenuItem item){
Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show();
return super.onContextItemSelected(item);
}這裡僅顯示選中選項的ID
效果截圖:
三、創建子菜單、單選子菜單、多選子菜單
1、子菜單
在<item/>標簽內嵌套<menu/>
[html] <menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/submenu"
android:title="菜單項1">
<menu>
<item android:id="@+id/submenu_item1"
android:title="子菜單項1" />
</menu>
</item>
</menu>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/submenu"
android:title="菜單項1">
<menu>
<item android:id="@+id/submenu_item1"
android:title="子菜單項1" />
</menu>
</item>
</menu>
2、單選子菜單、多選子菜單
使用group標簽,設置屬性android:checkableBehavior其中的三個值:single、all、none
single設置為單選,all為多選,none為普通選項
更多的屬性說明可以閱讀文檔:http://android.toolib.net/guide/topics/resources/menu-resource.html
多選示例:
[html] <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/csubmenu3" android:title="多選菜單">
<menu>
<group android:checkableBehavior="all">
<item android:title="子菜單1"/>
<item android:title="子菜單2"/>
<item android:title="子菜單3"/>
</group>
</menu>
</item>
</menu>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/csubmenu3" android:title="多選菜單">
<menu>
<group android:checkableBehavior="all">
<item android:title="子菜單1"/>
<item android:title="子菜單2"/>
<item android:title="子菜單3"/>
</group>
</menu>
</item>
</menu>效果如下:
單選示例:
[html] <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/csubmenu2" android:title="單選菜單">
<menu>
<group android:checkableBehavior="single">
<item android:title="子菜單1"/>
<item android:title="子菜單2"/>
<item android:title="子菜單3"/>
</group>
</menu>
</item>
</menu>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/csubmenu2" android:title="單選菜單">
<menu>
<group android:checkableBehavior="single">
<item android:title="子菜單1"/>
<item android:title="子菜單2"/>
<item android:title="子菜單3"/>
</group>
</menu>
</item>
</menu>效果如下
更多關於Menu方面的內容,可以閱讀文檔:http://android.toolib.net/guide/topics/resources/menu-resource.html
摘自 God's blog