情境
Menu是一個常用的工具,最常使用的有三種 分別是 Menu、SubMenu 和 ContextMenu。
但是目前這個方法已經很少人在用了,建議透過 Toolbar 來生成 Menu,可以參考 ### 如何在Toolbar使用Menu
如圖右上角的三個點。
程式碼說明
Menu
首先要加入Menu非常簡單
只要在Activity裡面覆寫onCreateOptionsMenu就可以
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
仔細看這個方法,它會傳入一個menu,
我們就是利用這個menu來增加我們的Item
只要寫入
menu.add(groupId, itemId, order, title)
可以看到傳入的第一個參數是groupId, 代表你是屬於那一個Group,
通常都會設定為Menu.NONE
第二個參數代表你是Menu Item Id,
第三個參數是你放入Item的順序,
假如你都設為Menu.NONE代表你使用預設, 系統會幫你安排順序
第四個參數就是你想要放入的標題
加入5個item
@Override
public boolean onCreateOptionsMenu(Menu menu) {
for(int i = 0; i < 5; i++){
menu.add(Menu.NONE, Menu.FIRST + i, Menu.NONE, "Item " + Integer.toString(i + 1));
}
return super.onCreateOptionsMenu(menu);
}
你就會看到下面的圖示
那要怎麼處理按下Menu Item以後的動作呢?
只要覆寫onOptionsItemSelected這個方法即可
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
它一樣會傳入你點下的Item, 只要你利用Item.getGroupId()方法
就可以處理點下的動作, 例如
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getGroupId() == Menu.NONE) {
Toast.makeText(getApplicationContext(),
item.getTitle(),
Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
就可以顯示你點下的Item了
SubMenu
跟Menu相同, 只是它用在加入了Menu以後處理變成跳出List再讓你選一次,
先建立Menu第一個Item
然後在建立該Item的SubItem
@Override
public boolean onCreateOptionsMenu(Menu menu) {
for(int i = 0; i < 5; i++){
menu.add(Menu.NONE, Menu.FIRST + i, Menu.NONE, "Item " + Integer.toString(i + 1));
}
SubMenu subMenu = menu.addSubMenu(3, Menu.FIRST, Menu.NONE, "sub item");
for(int i = 0; i < 3; i++){
subMenu.add(Menu.FIRST, Menu.FIRST, Menu.NONE, "Sub Item " + Integer.toString(i + 1));
}
return super.onCreateOptionsMenu(menu);
}
這樣就會跳出SubItem的選項了 如下圖
點選下去就會跳到sub item那層
點擊也是相同作法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getGroupId() == Menu.NONE) {
Toast.makeText(getApplicationContext(),
item.getTitle(),
Toast.LENGTH_SHORT).show();
} else if(item.getGroupId() == Menu.FIRST){
Toast.makeText(getApplicationContext(),
item.getTitle(),
Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
顯示點擊的位置
Context Menu
通常這個都是用"長按"當前畫面就會跳出List
如同Menu跟SubMenu一樣
先覆寫onCreateContextMenu
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
}
然後將Item逐一加入menu裡面
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
for(int i = 0; i < 5 ; i++){
menu.add(5, Menu.FIRST + i, Menu.NONE, "Context menu item "+ i);
}
super.onCreateContextMenu(menu, v, menuInfo);
}
再來你要到XML幫Layout加上名稱
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/my_layout"
>
</LinearLayout>
然後跟Menu不太一樣的是要在onCreate裡面註冊
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
registerForContextMenu(findViewById(R.id.my_layout));
}
這樣你才能在畫面長按的時候跳出List
如下圖
那如果要處理按下的動作
只要覆寫
@Override
public boolean onContextItemSelected(MenuItem item) {
if(item.getGroupId() == 5){
Toast.makeText(getApplicationContext(),
item.getTitle(),
Toast.LENGTH_SHORT).show();
}
return super.onContextItemSelected(item);
}
這樣Menu大概就解說完畢。