菜單的官方文檔:
https://developer.android.google.cn/guide/topics/ui/menus.html
Android 操作系統(tǒng)中有三種基本的菜單:選項菜單(Options Menu)、上下文菜單(ContextMenu)和彈出菜單(PopupMenu)。對于所有的菜單資源,應該使用 XML 菜單資源定義菜單及其所有項。
定義菜單的步驟如下:在 res/menu/ 目錄內創(chuàng)建一個 XML 文件,并使用<menu> <item> <group> 元素構建菜單。
選項菜單的創(chuàng)建
要為 Activity 指定選項菜單,要重寫 onCreateOptionsMenu() 方法。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
return true;
}
處理點擊事件
當用戶從選項菜單中選擇項目時,系統(tǒng)將調用 Activity 的 onOptionsItemSelected() 方法。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
Toast.makeText(this,"one",Toast.LENGTH_SHORT).show();
return true;
case R.id.item2:
Toast.makeText(this,"two",Toast.LENGTH_SHORT).show();
return true;
case R.id.item3:
Toast.makeText(this,"three",Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}

共用菜單的處理方法.png
上下文菜單的創(chuàng)建
需要在創(chuàng)建菜單的 Activity 或 Fragment 中重寫如下方法:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu,menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item4:
Toast.makeText(this,"one",Toast.LENGTH_SHORT).show();
return true;
case R.id.item5:
Toast.makeText(this,"two",Toast.LENGTH_SHORT).show();
return true;
case R.id.item6:
Toast.makeText(this,"three",Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
為要綁定上下文菜單的空間添加長按響應屬性:
android:longClickable="true"
并使用registerForContextMenu()方法注冊
創(chuàng)建彈出菜單
Activity 可按照如下方式顯示出菜單:
public void showPopup(View view) {
PopupMenu popupMenu = new PopupMenu(this,view);
MenuInflater inflater = popupMenu.getMenuInflater();
inflater.inflate(R.menu.popup_menu,popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.item7:
Toast.makeText(MainActivity.this, "one", Toast.LENGTH_SHORT).show();
return true;
case R.id.item8:
Toast.makeText(MainActivity.this, "two", Toast.LENGTH_SHORT).show();
return true;
case R.id.item9:
Toast.makeText(MainActivity.this, "three", Toast.LENGTH_SHORT).show();
return true;
default:
return false;
}
}
});
}