package com.webabcd.menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.TextView;
import android.widget.Toast;
// 演示兩種菜單的實(shí)現(xiàn)方式:上下文菜單(通過在某元素上長按,來呼出菜單)和選項(xiàng)菜單(通過按手機(jī)上的菜單按鈕,來呼出菜單)
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 為 R.id.txt1 注冊一個上下文菜單(在此 TextView 上長按,則會呼出上下文菜單)
// 具體呼出的菜單內(nèi)容需要重寫 onCreateContextMenu 來創(chuàng)建
TextView txt1 = (TextView) this.findViewById(R.id.txt1);
this.registerForContextMenu(txt1);
// 為 R.id.txt2 注冊一個上下文菜單
TextView txt2 = (TextView) this.findViewById(R.id.txt2);
this.registerForContextMenu(txt2);
}
// 重寫 onCreateContextMenu 用以創(chuàng)建上下文菜單
// 重寫 onContextItemSelected 用以響應(yīng)上下文菜單
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
// 創(chuàng)建 R.id.txt1 的上下文菜單
if (v == (TextView) this.findViewById(R.id.txt1)) {
// ContextMenu.setIcon() - 設(shè)置菜單的圖標(biāo)
// ContextMenu.setHeaderTitle() - 設(shè)置菜單的標(biāo)題
menu.setHeaderIcon(R.drawable.icon01);
menu.setHeaderTitle("我是菜單");
// 用 ContextMenu.add() 來增加菜單項(xiàng),返回值為 MenuItem
// 第一個參數(shù):組ID
// 第二個參數(shù):菜單項(xiàng)ID
// 第三個參數(shù):順序號
// 第四個參數(shù):菜單項(xiàng)上顯示的內(nèi)容
menu.add(1, 0, 0, "菜單1");
// MenuItem - 新增菜單項(xiàng)后的返回類型,針對菜單項(xiàng)的其他設(shè)置在此對象上操作
menu.add(1, 1, 1, "菜單2").setCheckable(true);
}
// 創(chuàng)建 R.id.txt2 的上下文菜單(多級上下文菜單)
else if (v == (TextView) this.findViewById(R.id.txt2)) {
// ContextMenu.addSubMenu("菜單名稱") - 用來添加子菜單。子菜單其實(shí)就是一個特殊的菜單
SubMenu sub = menu.addSubMenu("父菜單1");
sub.setIcon(R.drawable.icon01);
sub.add(0, 0, 0, "菜單1");
sub.add(0, 1, 1, "菜單2");
sub.setGroupCheckable(1, true, true);
SubMenu sub2 = menu.addSubMenu("父菜單2");
sub2.setIcon(R.drawable.icon01);
sub2.add(1, 0, 0, "菜單3");
sub2.add(1, 1, 1, "菜單4");
sub2.setGroupCheckable(1, true, false);
}
}
// 重寫 onCreateOptionsMenu 用以創(chuàng)建選項(xiàng)菜單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem menuItem = menu.add(0, 0, 0, "菜單111111111111111111111");
// MenuItem.setIcon() - 設(shè)置菜單項(xiàng)的圖標(biāo)
// MenuItem.setTitleCondensed() - 菜單的簡標(biāo)題,如果指定了簡標(biāo)題的話,菜單項(xiàng)上的標(biāo)題將會以此簡標(biāo)題為準(zhǔn)
// MenuItem.setAlphabeticShortcut() - 設(shè)置選中此菜單項(xiàng)的快捷鍵
// 注:菜單項(xiàng)超過 6 個的話,第 6 個菜單將會變?yōu)?nbsp; More 菜單,多余的菜單會在單擊 More 菜單之后顯示出來
menuItem.setIcon(R.drawable.icon01);
menuItem.setTitleCondensed("菜單1");
menuItem.setAlphabeticShortcut('a');
menu.add(0, 1, 1, "菜單2").setIcon(R.drawable.icon02);
menu.add(0, 2, 2, "菜單3").setIcon(R.drawable.icon03);
menu.add(0, 3, 3, "菜單4");
menu.add(0, 4, 4, "菜單5");
menu.add(0, 5, 5, "菜單6");
menu.add(0, 6, 6, "菜單7").setIcon(R.drawable.icon04);
menu.add(0, 7, 7, "菜單8").setIcon(R.drawable.icon05);
return true;
}
// 重寫 onOptionsItemSelected 用以響應(yīng)選項(xiàng)菜單
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
Toast.makeText(Main.this, "被單擊的菜單項(xiàng)為:" + String.valueOf(item.getItemId()), Toast.LENGTH_SHORT).show();
return false;
}
}