在android中,有以下幾種菜單:
1.Options Menu(選項菜單);
效果,在action bar處顯示所定義的菜單項。
2.Context Menu(上下文菜單);
效果:長按後彈出菜單窗口在屏幕中央。
3.Popup Menu(彈出框菜單)。
效果:在所綁定的view 的上邊或下邊顯示菜單窗口。
4.contextual Action Mode。(這個我打算另立一篇blog。也比較常用。常用於listView等adapterView裏,進行多選,然後同時對多個選項進行操作。)
1.選項菜單。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:showAsAction="always"
android:title="item">
<menu>
<item android:title="menu1"/>
<item android:title="menu2"/>
</menu>
</item>
</menu>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_4_23, menu);
return true; //當你inflate菜單後需要return true,不然不會顯示
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {<span style="white-space:pre"> </span>
case R.id.menu1:
Toast.makeText(this, "menu1 has been seleted", Toast.LENGTH_SHORT).show();
return true;<span style="white-space:pre"> </span>//return true 告知系統這裏處理了該事件
case R.id.menu2:
Toast.makeText(this, "menu2 has been seleted", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onContextItemSelected(item);
}
}
點擊item後效果圖:2.Context Menu 上下文菜單
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu_4_23, menu);//看着都一樣,通過menuInflater去填充view視圖。當然啦,首先還是要定義menu文件的。
}
<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre"> </span>2.定義點擊ContextMenu中item的處理方法</span>
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu1:
Toast.makeText(this, "menu1 has been seleted", Toast.LENGTH_SHORT).show();
return true;
case R.id.menu2:
Toast.makeText(this, "menu2 has been seleted", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onContextItemSelected(item);
}
}
TextView mContextTv =(TextView) findViewById(R.id.contextMenuTv);
registerForContextMenu(mContextTv);
然後長按該view對象就會出現如下所示畫面: public void showMenu(View v) {
PopupMenu popup = new PopupMenu(this, v);
// 設置監聽器接口,本類實現了該接口。
popup.setOnMenuItemClickListener(this);
popup.inflate(R.menu.actions);
popup.show();
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.archive:
archive(item);
return true;
case R.id.delete:
delete(item);
return true;
default:
return false;
}
}