1. 程式人生 > >android 的Menu選單

android 的Menu選單

menu分為optionMenu和ContextOptionMenu和PopupMenu

optionMenu

靜態的建立option

使用onCreteOptionsMenu方法獲取要顯示的optionMenu選單。使用getMenuInflater的inflater方法把R.menu.main填充在menu中 程式碼如下
@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}


使用onOptionItemSelected設定點選事件
程式碼如下
@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.menu_exit:
			Toast.makeText(this, "點選了退出", Toast.LENGTH_SHORT).show();
			break;

		case R.id.menu_red:
			Toast.makeText(this, "點選了紅色", Toast.LENGTH_SHORT).show();
			break;
		case R.id.menu_green:
			Toast.makeText(this, "點選了綠色", Toast.LENGTH_SHORT).show();
			break;
		case R.id.menu_blue:
			Toast.makeText(this, "點選了藍色", Toast.LENGTH_SHORT).show();
			break;
		}
		return true;
	}
main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.phone.menu.MainActivity" >

    <item
        android:id="@+id/menu_exit"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="退出"/>
    <item
        android:id="@+id/menu_font_color"
        android:title="字型顏色設定">
        <menu>
            <group>
                <item
                    android:id="@+id/menu_red"
                    android:title="紅色">
                </item>
                <item
                    android:id="@+id/menu_green"
                    android:title="綠色">
                </item>
                <item
                    android:id="@+id/menu_blue"
                    android:title="藍色">
                </item>
            </group>
        </menu>
    </item>

</menu>

動態建立OptionsMenu

在onCreateOptionsMenu方法中直接使用add新增
private static final int ITEMID0 = 0;
	private static final int ITEMID1 = 1;
	private static final int ITEMID2 = 2;
	private static final int ITEMID3 = 3;
@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		//getMenuInflater().inflate(R.menu.main, menu);
		menu.add(Menu.NONE, ITEMID0, Menu.NONE, "item1");
		menu.add(Menu.NONE, ITEMID1, Menu.NONE, "item2");
		menu.add(Menu.NONE, ITEMID2, Menu.NONE, "item3");
		menu.add(Menu.NONE, ITEMID3, Menu.NONE, "item4");
		return true;
	}

在onOptionsItemSelected設定點選事件
@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case ITEMID0:
			Toast.makeText(this, "點選了item1", Toast.LENGTH_SHORT).show();
			break;

		case ITEMID1:
			Toast.makeText(this, "點選了item2", Toast.LENGTH_SHORT).show();
			break;
		case ITEMID2:
			Toast.makeText(this, "點選了item3", Toast.LENGTH_SHORT).show();
			break;
		case ITEMID3:
			Toast.makeText(this, "點選了item4", Toast.LENGTH_SHORT).show();
			break;
		}
		return true;
	}

ContextMenu

靜態的新增 在onCreateContextMenu方法中使用填充器吧menu填充在menu中 程式碼
@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
		
		getMenuInflater().inflate(R.menu.main, menu);
		super.onCreateContextMenu(menu, v, menuInfo);
	}

監聽事件
@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.collect:
			Toast.makeText(this, "收藏", Toast.LENGTH_SHORT).show();
			break;

		case R.id.unfavorite:
			Toast.makeText(this, "取消收藏", Toast.LENGTH_SHORT).show();
			break;
		case R.id.color_red:
			Toast.makeText(this, "紅色", Toast.LENGTH_SHORT).show();
			break;
		case R.id.color_green:
			Toast.makeText(this, "綠色", Toast.LENGTH_SHORT).show();
			break;
		case R.id.color_blue:
			Toast.makeText(this, "藍色", Toast.LENGTH_SHORT).show();
			break;
		}
		
		return true;
	}
註冊,使用contextMenu必須註冊,把contextMenu註冊在那一view控制元件中,長按那個控制元件就會出現ContextMenu選單
/**設定listview的介面卡,*/
	private void initViews() {
		String[] names=getResources().getStringArray(R.array.name);
		ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
		setListAdapter(adapter);
		registerForContextMenu(getListView());//註冊contextMenu
	}

動態的新增
在onCreateContextMenu中使用add方法新增 程式碼
private static final int ITEMID0 = 0;
	private static final int ITEMID1 = 1;


@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
		
		menu.add(Menu.NONE, ITEMID0, Menu.NONE,"收藏" );
		menu.add(Menu.NONE, ITEMID1, Menu.NONE,"取消收藏" );
		super.onCreateContextMenu(menu, v, menuInfo);
	}
在onContextItemSelected中設定監聽
@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case ITEMID0:
			Toast.makeText(this, "收藏", Toast.LENGTH_SHORT).show();
			break;

		case ITEMID1:
			Toast.makeText(this, "取消收藏", Toast.LENGTH_SHORT).show();
			break;
		}
		
		return true;
	}
註冊:與靜態的註冊一樣
/**設定listview的介面卡,*/
	private void initViews() {
		String[] names=getResources().getStringArray(R.array.name);
		ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
		setListAdapter(adapter);
		registerForContextMenu(getListView());//註冊contextMenu
	}
PopupMenu
靜態的新增 使用步驟: 1.建立一個popupMenu物件; 2.呼叫物件的getMenuInflater把R.menu.main填充在menu中 3.設定監聽 4.呼叫show方法顯示 程式碼
public void click(View view){
		PopupMenu pm=new PopupMenu(this, view);
		pm.getMenuInflater().inflate(R.menu.main, pm.getMenu());
		pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {
			
			@Override
			public boolean onMenuItemClick(MenuItem item) {
				switch (item.getItemId()) {
				case R.id.collect:
					Toast.makeText(MainActivity.this, "收藏", Toast.LENGTH_SHORT).show();
					break;

				case R.id.unfavorite:
					Toast.makeText(MainActivity.this, "取消收藏", Toast.LENGTH_SHORT).show();
					break;
				case R.id.color_red:
					Toast.makeText(MainActivity.this, "紅色", Toast.LENGTH_SHORT).show();
					break;
				case R.id.color_green:
					Toast.makeText(MainActivity.this, "綠色", Toast.LENGTH_SHORT).show();
					break;
				case R.id.color_blue:
					Toast.makeText(MainActivity.this, "藍色", Toast.LENGTH_SHORT).show();
					break;
					
				}
					
				return true;
			}
		});
		pm.show();
	}
動態新增 程式碼如下
private static final int ITEMID0 = 0;
	private static final int ITEMID1 = 1;
	private static final int GROUPID = 2;
	private static final int ITEMID2 = 3;
	private static final int ITEMID3 = 4;
	private static final int ITEMID4 = 5;

PopupMenu pm=new PopupMenu(this, view);
		Menu menu = pm.getMenu();
		menu.add(Menu.NONE, ITEMID0, Menu.NONE, "收藏");
		menu.add(Menu.NONE, ITEMID1, Menu.NONE, "取消收藏");
		SubMenu subMenu = menu.addSubMenu("字型顏色");
		subMenu.add(GROUPID, ITEMID2, Menu.NONE, "紅色");
		subMenu.add(GROUPID, ITEMID3, Menu.NONE, "綠色");
		subMenu.add(GROUPID, ITEMID4, Menu.NONE, "藍色");
		pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {
			
			@Override
			public boolean onMenuItemClick(MenuItem item) {
				switch (item.getItemId()) {
				case ITEMID0:
					Toast.makeText(MainActivity.this, "收藏", Toast.LENGTH_SHORT).show();
					break;

				case ITEMID1:
					Toast.makeText(MainActivity.this, "取消收藏", Toast.LENGTH_SHORT).show();
					break;
				case ITEMID2:
					Toast.makeText(MainActivity.this, "紅色", Toast.LENGTH_SHORT).show();
					break;
				case ITEMID3:
					Toast.makeText(MainActivity.this, "綠色", Toast.LENGTH_SHORT).show();
					break;
				case ITEMID4:
					Toast.makeText(MainActivity.this, "藍色", Toast.LENGTH_SHORT).show();
					break;
					
				}
					
				return true;
			}
		});
		pm.show();