Android中 Menu的使用

1。普通的Menu

  先來看看最簡單的Menu怎樣實現。

  在主Activity中覆蓋onCreateOptionsMenu(Menu menu)方法。

 代碼
  
  

   
    @Override
   
   
    public
   
    
   
    boolean
   
     onCreateOptionsMenu(Menu menu) {
       
   
    //
   
     TODO Auto-generated method stub
   
    
   
            menu.add(
   
    0
   
    ,
   
    1
   
    ,
   
    1
   
    ,
   
    "
   
    蘋果
   
    "
   
    );
        menu.add(
   
    0
   
    ,
   
    2
   
    ,
   
    2
   
    ,
   
    "
   
    香蕉
   
    "
   
    );
       
   
    return
   
    
   
    super
   
    .onCreateOptionsMenu(menu);
    }
  
  

這樣就有瞭兩個菜單選項。如果要添加點擊事件,則要覆蓋onOptionsItemSelected(MenuItem item)方法。

 代碼
  
  

   
    @Override
   
   
    public
   
    
   
    boolean
   
     onOptionsItemSelected(MenuItem item) {
       
   
    //
   
     TODO Auto-generated method stub
   
    
   
           
   
    if
   
    (item.getItemId()
   
    ==
   
    
   
    1
   
    ){
            Toast t
   
    =
   
     Toast.makeText(
   
    this
   
    ,
   
    "
   
    你選的是蘋果
   
    "
   
    , Toast.LENGTH_SHORT);
            t.show();
        }
       
   
    else
   
    
   
    if
   
    (item.getItemId()
   
    ==
   
    
   
    2
   
    ){
            Toast t
   
    =
   
     Toast.makeText(
   
    this
   
    ,
   
    "
   
    你選的是香蕉
   
    "
   
    , Toast.LENGTH_SHORT);
            t.show();
        }
       
   
    return
   
    
   
    true
   
    ;
    }
  
  

 

2。SubMenu

  SubMenu的制作也同樣簡單,在第一段代碼onCreateOptionsMenu(Menu menu)方法中加入幾句,成下面這樣:

 代碼
  
  

   
    @Override
   
   
    public
   
    
   
    boolean
   
     onCreateOptionsMenu(Menu menu) {
       
   
    //
   
     TODO Auto-generated method stub
   
    
   
            menu.add(
   
    0
   
    ,
   
    1
   
    ,
   
    1
   
    ,
   
    "
   
    蘋果
   
    "
   
    );
        menu.add(
   
    0
   
    ,
   
    2
   
    ,
   
    2
   
    ,
   
    "
   
    香蕉
   
    "
   
    );
        SubMenu subMenu
   
    =
   
     menu.addSubMenu(
   
    1
   
    ,
   
    100
   
    ,
   
    100
   
    ,
   
    "
   
    桃子
   
    "
   
    );
        subMenu.add(
   
    2
   
    ,
   
    101
   
    ,
   
    101
   
    ,
   
    "
   
    大桃子
   
    "
   
    );
        subMenu.add(
   
    2
   
    ,
   
    102
   
    ,
   
    102
   
    ,
   
    "
   
    小桃子
   
    "
   
    );
       
   
    return
   
    
   
    true
   
    ;
    }
  
  

點擊“桃子”後就會出現子菜單,有兩個子選項,分別是“大桃子”和“小桃子”。

 

3。Context Menu

  類似於電腦上的右鍵,長按某個View之後彈出來的菜單。

  首先在main.xml裡定義若幹個按鈕。然後覆蓋onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)方法。裡面的代碼如下:

首先要註冊一下,在onCreate方法裡,如下代碼:

 代碼
  
  

   
    @Override
   
   
    public
   
    
   
    void
   
     onCreate(Bundle savedInstanceState) {
       
   
    super
   
    .onCreate(savedInstanceState);
        setContentView(R.layout.main);
        b1
   
    =
   
     (Button) findViewById(R.id.b1);
        b2
   
    =
   
     (Button) findViewById(R.id.b2);
        registerForContextMenu(b1);
        registerForContextMenu(b2);
    }
  
  

 

 代碼
  
  

   
    @Override
   
   
    public
   
    
   
    void
   
     onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
       
   
    //
   
     TODO Auto-generated method stub
   
    
   
           
   
    if
   
    (v
   
    ==
   
    b1){
            menu.setHeaderTitle(
   
    "
   
    這是1
   
    "
   
    );
            menu.add(
   
    200
   
    ,
   
    200
   
    ,
   
    200
   
    ,
   
    "
   
    Context Menu 1
   
    "
   
    );
            menu.add(
   
    200
   
    ,
   
    201
   
    ,
   
    201
   
    ,
   
    "
   
    Context Menu 2
   
    "
   
    );
        }
       
   
    else
   
    
   
    if
   
    (v
   
    ==
   
    b2){
            menu.setHeaderTitle(
   
    "
   
    這是2
   
    "
   
    );
            menu.add(
   
    300
   
    ,
   
    300
   
    ,
   
    300
   
    ,
   
    "
   
    C 1
   
    "
   
    );
            menu.add(
   
    300
   
    ,
   
    301
   
    ,
   
    301
   
    ,
   
    "
   
    C 2
   
    "
   
    );
        }
       
   
    super
   
    .onCreateContextMenu(menu, v, menuInfo);
    }
  
  

4。動態Menu

  動態菜單就是根據不同的界面有不同的菜單。下面的代碼實現這樣的功能:當主界面的某個TextView的值是“M“和“N”時,彈出不同的菜單。

 代碼
  
  

   
    @Override
   
   
    public
   
    
   
    boolean
   
     onPrepareOptionsMenu(Menu menu) {
       
   
    //
   
     TODO Auto-generated method stub
   
    
   
            String currentText
   
    =
   
     tv1.getText().toString();
       
   
    if
   
    (
   
    "
   
    M
   
    "
   
    .equals(currentText)){
            menu.clear();
   
    //
   
    先清掉菜單
   
    
   
                MenuItem item
   
    =
   
     menu.add(
   
    0
   
    ,
   
    400
   
    ,
   
    401
   
    ,
   
    "
   
    to N
   
    "
   
    );
   
    //
   
    可以通過點擊這個菜單項來改變tv1的值這樣(變成N)就可以測試瞭
   
    
   
                item.setIcon(android.R.drawable.alert_dark_frame);
   
    //
   
    android自帶的圖標
   
    
   
            }
       
   
    if
   
    (
   
    "
   
    N
   
    "
   
    .equals(currentText)){
            menu.clear();
   
    //
   
    先清掉菜單
   
    
   
                MenuItem item
   
    =
   
     menu.add(
   
    0
   
    ,
   
    401
   
    ,
   
    402
   
    ,
   
    "
   
    to M
   
    "
   
    );
   
    //
   
    可以通過點擊這個菜單項來改變tv1的值這樣(變成M)就可以測試瞭
   
    
   
                item.setIcon(android.R.drawable.alert_light_frame);
        }
        menu.add(
   
    0
   
    ,
   
    402
   
    ,
   
    403
   
    ,
   
    "
   
    Now is
   
    "
   
    
   
    +
   
     currentText);
   
    //
   
    現在共有兩個菜單子項
   
    
   
           
   
    return
   
    
   
    super
   
    .onPrepareOptionsMenu(menu);
    }
  
  


  

5。用xml文件方式創建Menu

之前都是用代碼的方法創建Menu,用xml配置文件也可以相當方便地制作菜單。

要res/目錄下建一個文件夾,名為menu,下面建一個xml文件,名為menu_xml_file.xml,代碼如下:

 代碼
  
  

   
    <?
   
    xml version="1.0" encoding="utf-8"
   
    ?>
   
    
   
    <
   
    menu
   
    xmlns:android
   
    ="http://schemas.android.com/apk/res/android"
   
    >
   
    
   
    <
   
    group
   
    android:id
   
    ="@+id/grout_main"
   
    >
   
        
   
    <
   
    item
   
    android:id
   
    ="@+id/menu_1"
   
                     android:title
   
    ="This 1"
   
    />
   
        
   
    <
   
    item
   
    android:id
   
    ="@+id/menu_2"
   
    
            android:title
   
    ="This 2"
   
    
   
    />
   
    
   
    </
   
    group
   
    >
   
    
   
    </
   
    menu
   
    >
  
  

在Activity中覆蓋onCreateOptionsMenu(Menu menu)方法,代碼如下:

 代碼
  
  

   
    @Override
   
   
    public
   
    
   
    boolean
   
     onCreateOptionsMenu(Menu menu) {
       
   
    //
   
     TODO Auto-generated method stub
   
    
   
            MenuInflater inflater
   
    =
   
     getMenuInflater();www.aiwalls.com
        inflater.inflate(R.menu.menu_xml_file, menu);
       
   
    return
   
    
   
    true
   
    ;
    }
  作者:Eric
  

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *