Android應用開發學習筆記之菜單

來源:互聯網
上載者:User

Android中的菜單分為選項菜單(OptionMenu)和操作功能表(Context Menu)。通常使用菜單資源檔建立菜單。菜單資源檔通常放置在res\menu目錄下,這個目錄預設情況下是不存在的,需要我們自己建立該目錄。菜單資源的根項目通常是<menu></menu>標記,在該標記中可以包含兩種子項目:

1、<item></item>標記,用於定義功能表項目。如果某個功能表項目中還包括子功能表,可以通過在該功能表項目中再包含<menu></menu>標記來實現。

2、<group></group>標記,用於將多個<item></item>標記定義的菜單封裝成一個菜單組。

 

一、菜單的建立步驟

1、  選項菜單

當使用者單擊功能表按鈕時,彈出的菜單就是選項菜單,建立選項菜單的步驟如下:

(1)      重寫Activity的onCreateOptionsMenu()方法。在該方法中,首先建立一個用於解析菜單資源檔的MenuInflater對象,然後調用該對象的inflate()方法解析一個菜單資源檔,並把解析後的菜單儲存在menu中。關鍵代碼如下:


[java]
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater=new MenuInflater(this);       //執行個體化一個MenuInflater對象  
    inflater.inflate(R.menu.optionmenu, menu);          //解析菜單檔案  
    return true; 

@Override
public boolean onCreateOptionsMenu(Menu menu) {
 MenuInflater inflater=new MenuInflater(this);  //執行個體化一個MenuInflater對象
 inflater.inflate(R.menu.optionmenu, menu);   //解析菜單檔案
 return true;
}

 

(2)      重寫onOptionsItemSelected()方法,用於當菜單被選擇時,做出相應處理。關鍵代碼舉例如下:


[java]
// Called when an options item is clicked  
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) { 
                case R.id.menu_setting: 
                        Log.d(TAG, "menu item setting is selected."); 
                        startActivity(new Intent(this, Settings.class)); 
                        break; 
                case R.id.menu_history: 
                        Log.d(TAG, "menu item history is selected."); 
                        startActivity(new Intent(this, History.class)); 
                        break; 
                case R.id.menu_about: 
                        Log.d(TAG, "menu item about is selected."); 
                        break; 
        } 
        return true; 

// Called when an options item is clicked
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
                case R.id.menu_setting:
                        Log.d(TAG, "menu item setting is selected.");
                        startActivity(new Intent(this, Settings.class));
                        break;
                case R.id.menu_history:
                        Log.d(TAG, "menu item history is selected.");
                        startActivity(new Intent(this, History.class));
                        break;
                case R.id.menu_about:
                        Log.d(TAG, "menu item about is selected.");
                        break;
        }
        return true;
}

 

 

2、  操作功能表

當使用者在某個控制項上長時間按住不放,這時彈出的菜單就是操作功能表。建立操作功能表的步驟如下:

(1)、在Activity的onCreate()方法中註冊操作功能表,例如,為文字框組件註冊操作功能表(也就是說在按住該文字框時,才顯示操作功能表),可以使用下面的代碼,:


[java]
TextView tv = (TextView)findViewById(R.id.textView); 
registerForContextMenu(tv); 

TextView tv = (TextView)findViewById(R.id.textView);
registerForContextMenu(tv);

 

(2)、重寫Activity的onCreateContextMenu()方法,在該方法中,首先建立一個用於解析菜單資源的MenuInflater對象,然後調用該對象的inflate()方法解析菜單資源檔,並把解析後的菜單儲存在menu中,最後為菜單頭設定表徵圖和標題。關鍵代碼如下:


[java]
@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
        ContextMenuInfo menuInfo) { 
    MenuInflater inflator=new MenuInflater(this);   //執行個體化一個MenuInflater對象  
    inflator.inflate(R.menu.contextmenu, menu);     //解析菜單檔案  
    menu.setHeaderIcon(R.drawable.ic_launcher);     //為菜單頭設定表徵圖  
    menu.setHeaderTitle("選擇顏色:");           //為菜單頭設定標題  
 

 @Override
 public void onCreateContextMenu(ContextMenu menu, View v,
   ContextMenuInfo menuInfo) {
  MenuInflater inflator=new MenuInflater(this);  //執行個體化一個MenuInflater對象
  inflator.inflate(R.menu.contextmenu, menu);  //解析菜單檔案
  menu.setHeaderIcon(R.drawable.ic_launcher);  //為菜單頭設定表徵圖
  menu.setHeaderTitle("選擇顏色:");   //為菜單頭設定標題

 }

 

(3)、重寫onContextItemSelected()方法,用於當菜單被選擇時,做出相應處理。關鍵代碼如下:

 

[java]
@Override 
public boolean onContextItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
        case R.id.color1:       //當選擇紅顏色時  
            tv.setTextColor(Color.rgb(255, 0, 0)); 
            break; 
        case R.id.color2:       //當選擇綠顏色時  
            tv.setTextColor(Color.rgb(0, 255, 0)); 
            break; 
        default: 
            tv.setTextColor(Color.rgb(255, 255, 255)); 
    } 
    return true; 

 @Override
 public boolean onContextItemSelected(MenuItem item) {
  switch(item.getItemId()){
   case R.id.color1:  //當選擇紅顏色時
    tv.setTextColor(Color.rgb(255, 0, 0));
    break;
   case R.id.color2:  //當選擇綠顏色時
    tv.setTextColor(Color.rgb(0, 255, 0));
    break;
   default:
    tv.setTextColor(Color.rgb(255, 255, 255));
  }
  return true;
 }

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.