android 的Menu選單
阿新 • • 發佈:2019-02-02
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設定點選事件
main.xml@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; }
<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();