Android雜談————Menu的用法

轉載 author:conowen@大鐘http://blog.csdn.net/conowen/article/details/7293264

1、Android的Menu簡介

Android系統的Menu主要有三種,OptionsMenu、ContextMenu、SubMenu。

Android手機一般都以一個Menu鍵,當按下Menu鍵時,每個activity都會相應這一事件。menu選項從左到右,從上到下排列。最多可以顯示六個,當多於六個時,第六個選項是“更多”,點擊就可以看到更多的選項了。

2、OptionsMenu用法

2.1、創建Menu

   按下Menu鍵時,屏幕底部就會彈出menu選項,提供選擇。創建OptionsMenu的方法是通過複寫onCreateOptionsMenu(),然後通過menu.add()方法添加各種選項,add方法的詳細參數和返回值如下。

[java] view plain copy

public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)   

groupId The group identifier that this item should be part of. This can be used to define groups of items for batch state changes.

            Normally use NONE if an item should not be in a group.

itemId Unique item ID. Use NONE if you do not need a unique ID.
order The order for the item. Use NONE if you do not care about the order. See getOrder().
title The text to display for the item.

Returns The newly added menu item.

第一個,組別,用來劃分itemid的。一般爲Menu.NONE
第二個,ID。是menu識別編號,供識別menu用的。很重要。
第三個,順序。這個參數的大小決定菜單選項出現的先後順序。順序按照參數由小到大。
第四個,顯示文本。

返回值爲turn時,menu纔有效,若是 return false;則menu不能顯示,也就是說menu無效。
複寫方法onCreateOptionsMenu()時,就有個 return super.onCreateOptionsMenu(menu);,默認就行了。
添加menu選項例子:
[java] view plain copy

menu.add(Menu.NONE,0,0,"添加").setIcon(android.R.drawable.ic_menu_add);  

2.2、處理Menu
通過複寫onOptionsItemSelected()方法即可,然後通過item.getItemId(),篩選不同的itemid,然後執行相應的方法。
[java] view plain copy

switch (item.getItemId()) {  
        case 0:  
            Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();  
            break;  
        default:  
            Toast.makeText(this, "方法還沒定義", Toast.LENGTH_SHORT).show();  
            break;  
        }  
        return super.onOptionsItemSelected(item);  

2.3、其他方法
onPrepareOptionsMenu()方法簡述
點擊menu按鈕時,menu顯示出來前,通過複寫這個方法可以定義處理事件。

onOptionsMenuClosed()簡述
退出menu之後,通過複寫這個方法可以定義處理事件。menu按鈕再被點擊,back按鈕被點擊,或者用戶選擇了menu其中的一個選項,menu都會退出。

=============================
全部demo源代碼

[java] view plain copy

/*author:conowen 
 * date:2012.2.25 
 */  
package conowen.szu.menu;  

import android.app.Activity;  
import android.os.Bundle;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.widget.Toast;  

public class MenuActivity extends Activity {  

    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  

    }  

    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // TODO Auto-generated method stub  

        menu.add(Menu.NONE, 0, 0, "添加").setIcon(android.R.drawable.ic_menu_add);  
        menu.add(Menu.NONE, 1, 1, "保存")//設置圖標  
                .setIcon(android.R.drawable.ic_menu_save);  
        menu.add(Menu.NONE, 2, 2, "發送")  
                .setIcon(android.R.drawable.ic_menu_send);  
        menu.add(Menu.NONE, 3, 3, "詳細").setIcon(  
                android.R.drawable.ic_menu_info_details);  
        menu.add(Menu.NONE, 4, 4, "刪除").setIcon(  
                android.R.drawable.ic_menu_delete);  
        menu.add(Menu.NONE, 5, 5, "幫助")  
                .setIcon(android.R.drawable.ic_menu_help);  
        menu.add(Menu.NONE, 6, 6, "搜索").setIcon(  
                android.R.drawable.ic_menu_search);  

        return super.onCreateOptionsMenu(menu);  
        // return false;  
    }  

    @Override  
    public boolean onOptionsItemSelected(MenuItem item) {  
        // TODO Auto-generated method stub  
        switch (item.getItemId()) {  
        case 0:  
            Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();  
            break;  
        case 1:  
            Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();  
            break;  
        case 2:  
            Toast.makeText(this, "發送", Toast.LENGTH_SHORT).show();  
            break;  
        case 3:  
            Toast.makeText(this, "詳細", Toast.LENGTH_SHORT).show();  
            break;  

        default:  
            Toast.makeText(this, "方法還沒定義", Toast.LENGTH_SHORT).show();  
            break;  
        }  
        return super.onOptionsItemSelected(item);  
    }  

    @Override  
    public boolean onPrepareOptionsMenu(Menu menu) {  
        // TODO Auto-generated method stub  
        Toast.makeText(this, "menu沒出來時,處理方法自己定義即可", Toast.LENGTH_SHORT).show();  
        return super.onPrepareOptionsMenu(menu);  
    }  

    @Override  
    public void onOptionsMenuClosed(Menu menu) {  
        // TODO Auto-generated method stub  
        Toast.makeText(this, "menu退出後,處理方法自己定義即可", Toast.LENGTH_SHORT).show();  
        super.onOptionsMenuClosed(menu);  
    }  
}  

3、SubMenu用法

SubMenu實現的是子菜單功能,如“添加”的下一級菜單爲“從網絡添加”和“從本地添加兩個選項的Menu”

[java] view plain copy

SubMenu submenu=menu.addSubMenu(Menu.NONE, 0, 0, "添加")  
                .setIcon(android.R.drawable.ic_menu_add);  
        submenu.add(Menu.NONE, 10, 0, "從網絡添加");  
        submenu.add(Menu.NONE, 11, 1, "從本地添加");  

submenu.add()方法不能設置圖標,設置了也是無效的。

[java] view plain copy

/*author:conowen 
 * date:2012.2.25 
 */  
package conowen.szu.menu;  

import android.app.Activity;  
import android.os.Bundle;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.SubMenu;  
import android.widget.Toast;  

public class MenuActivity extends Activity {  

    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  

    }  

    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // TODO Auto-generated method stub  
        SubMenu submenu=menu.addSubMenu(Menu.NONE, 0, 0, "添加")  
                .setIcon(android.R.drawable.ic_menu_add);  
        submenu.add(Menu.NONE, 10, 0, "從網絡添加");  
        submenu.add(Menu.NONE, 11, 1, "從本地添加");  


        menu.add(Menu.NONE, 1, 1, "保存")//設置圖標  
                .setIcon(android.R.drawable.ic_menu_save);  



        return super.onCreateOptionsMenu(menu);  
        // return false;  
    }  

    @Override  
    public boolean onOptionsItemSelected(MenuItem item) {  
        // TODO Auto-generated method stub  
        switch (item.getItemId()) {  
        case 0:  
            Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();  
            break;  
        case 1:  
            Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();  
            break;  
        case 10:  
            Toast.makeText(this, "從網絡添加", Toast.LENGTH_SHORT).show();  
            break;  
        case 11:  
            Toast.makeText(this, "從本地添加", Toast.LENGTH_SHORT).show();  
            break;  

        default:  

            break;  
        }  
        return super.onOptionsItemSelected(item);  
    }  


}  

4、ContextMenu用法

    長按某個View達2秒後,就彈出menu。創建的方法是複寫onCreateContextMenu()方法,處理方法是onContextItemSelected()。因爲是長按某一個View,所以ContextMenu要註冊到目標view,才能實現。

註冊方法如下(如,註冊到一個EditText,長按這個EditText就可以調出Menu了),et是EditText的id

[java] view plain copy

this.registerForContextMenu(findViewById(R.id.et));  

onCreateContextMenu裏面的add()方法不能添加圖標()setIcon,就算添加了,也不能顯示出來的。在onCreateContextMenu方法裏面也能設置submenu子菜單,方法參考第3點

[java] view plain copy

/*author:conowen 
 * date:2012.2.25 
 */  
package conowen.szu.menu;  

import android.app.Activity;  
import android.os.Bundle;  
import android.view.ContextMenu;  
import android.view.ContextMenu.ContextMenuInfo;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.View;  
import android.widget.Toast;  

public class MenuActivity extends Activity {  



    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        this.registerForContextMenu(findViewById(R.id.et));  
        //註冊到EditText,et是它的id  

    }  

    @Override  
    public void onCreateContextMenu(ContextMenu menu, View v,  
            ContextMenuInfo menuInfo) {  
        // TODO Auto-generated method stub  
        menu.add(Menu.NONE, 0, 0, "添加");  
        menu.add(Menu.NONE, 1, 1, "保存");  
        menu.add(Menu.NONE, 2, 2, "發送");  
        menu.add(Menu.NONE, 3, 3, "詳細");  
        menu.add(Menu.NONE, 4, 4, "刪除");  
        menu.add(Menu.NONE, 5, 5, "幫助");  
        menu.add(Menu.NONE, 6, 6, "搜索");  
        super.onCreateContextMenu(menu, v, menuInfo);  
    }  
    @Override  
    public boolean onContextItemSelected(MenuItem item) {  
        // TODO Auto-generated method stub  
        switch (item.getItemId()) {  
        case 0:  
            Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();  
            break;  
        case 1:  
            Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();  
            break;  
        case 2:  
            Toast.makeText(this, "發送", Toast.LENGTH_SHORT).show();  
            break;  
        case 3:  
            Toast.makeText(this, "詳細", Toast.LENGTH_SHORT).show();  
            break;  

        default:  
            Toast.makeText(this, "方法還沒定義", Toast.LENGTH_SHORT).show();  
            break;  
        }  
        return super.onContextItemSelected(item);  
    }  

}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章