android--菜單

 

android中菜單分爲三種,分別是,options menu 選項菜單,sub menu 子菜單,context menu 上下文菜單。下面分別舉例演示這三種菜單:


新建一個android project,

options menu,第一種方法,通過xml定義選項菜單,在res文件夾中新建一個名爲menu的文件夾,在其內新建一個options_menu.xml的文件:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.   
  4.     <item  
  5.         android:id="@+id/newFile"  
  6.         android:icon="@drawable/ic_launcher"  
  7.         android:title="@string/newFile"  
  8.         />  
  9.     <!-- android:icon 設置菜單選項的圖標  
  10.     android:title 設置菜單選項的標題 -->  
  11.     <item   
  12.         android:id="@+id/exit"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:title="@string/exit"  
  15.         />  
  16.   
  17. </menu>  

在MenuTestActivity1中:

  1. package cn.sword.activity;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuInflater;  
  7. import android.view.MenuItem;  
  8. import android.view.MenuItem.OnMenuItemClickListener;  
  9. import android.widget.Toast;  
  10.   
  11. public class MenuTestActivity1 extends Activity implements OnMenuItemClickListener{  
  12.     /** Called when the activity is first created. */  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.main);  
  17.           
  18.     }  
  19.   
  20.     @Override  
  21.     public boolean onCreateOptionsMenu(Menu menu) {  
  22.         MenuInflater inflater = this.getMenuInflater();  
  23.         inflater.inflate(R.menu.options_menu, menu);  
  24.         //第一種響應菜單點擊事件的方法  
  25.         //爲每一個菜單選項添加監聽事件  
  26.         //在覆蓋的onMenuItemClick()方法中判斷並觸發監聽事件  
  27.         for(int i=0;i<menu.size();i++){  
  28.             menu.getItem(i).setOnMenuItemClickListener((OnMenuItemClickListener) this);  
  29.         }  
  30.   
  31.         return super.onCreateOptionsMenu(menu);  
  32.     }  
  33.   
  34.     /*第二種響應菜單點擊事件的方法 覆蓋onOptionsItemSelected()方法  
  35.     @Override  
  36.     public boolean onOptionsItemSelected(MenuItem item) {  
  37.         switch(item.getItemId()){  
  38.             case R.id.newFile:  
  39.                 Toast.makeText(this,"new File", Toast.LENGTH_LONG).show();  
  40.                 break;  
  41.             case R.id.exit:  
  42.                 this.finish();//退出程序  
  43.                 break;  
  44.         }  
  45.           
  46.         return super.onOptionsItemSelected(item);  
  47.     }*/  
  48.       
  49.     public boolean onMenuItemClick(MenuItem item){  
  50.         switch(item.getItemId()){  
  51.         case R.id.newFile:  
  52.             Toast.makeText(this, "new File", Toast.LENGTH_LONG).show();  
  53.             break;  
  54.         case R.id.exit:  
  55.             this.finish();  
  56.         }  
  57.           
  58.         return false;  
  59.     }  
  60.       
  61. }  


在模擬器中點擊Menu鍵效果:




options menu,第二種方法,動態添加刪除菜單


在MenuTestActivity2中:

  1. package cn.class3g.activity;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuInflater;  
  7. import android.view.MenuItem;  
  8. import android.widget.Toast;  
  9.   
  10. public class MenuTestActivity2 extends Activity {  
  11. <span style="white-space:pre">    </span>//定義菜單項  
  12.     private static final int SAVE=1;  
  13.     private static final int SAVESAVE_AS = SAVE+1;  
  14.     private static final int DELETE = SAVE+2;  
  15.     //聲明一個menu對象  
  16.     Menu menu = null;  
  1.     public void onCreate(Bundle savedInstanceState) {  
  2.         super.onCreate(savedInstanceState);  
  3.         setContentView(R.layout.main);  
  4.     }  
  5.   
  6.     public boolean onCreateOptionsMenu(Menu menu) {  
  7.         MenuInflater inflater = this.getMenuInflater();  
  8.         inflater.inflate(R.menu.options_menu, menu);  
  9.           
  10.         //向菜單中添加菜單項  
  11.         menu.add(1, SAVE, 1, "保存");  
  12.         menu.add(1,SAVE_AS, 2, "另存爲");  
  13.         menu.add(1,DELETE, 3, "刪除保存");  
  14.         //設置菜單項的圖標  
  15.         menu.findItem(SAVE).setIcon(R.drawable.ic_launcher);      
  16.           
  17.         this.menu = menu;  
  18.   
  19.         return true;  
  20.     }  
  21.       
  22. <span style="white-space:pre">    </span>//動態的修改菜單title   
  23.     int i=1;  
  24.     public boolean onPrepareOptionsMenu(Menu menu) {  
  25.         MenuItem item = menu.findItem(SAVE_AS);  
  26.         item.setTitle(item.getTitle() + "" + i);  
  1.     i++;  
  2.     return super.onPrepareOptionsMenu(menu);  
  3. }  
  4. lt;span style="white-space:pre"> </span>//響應菜單單擊事件  
  5. public boolean onOptionsItemSelected(MenuItem item) {  
  6.     switch (item.getItemId()) {  
  7.     case R.id.newFile:  
  1.     Toast.makeText(this, "new file", Toast.LENGTH_LONG).show();//利用Toast彈出文本信息  
  2.     break;  
  3. case R.id.exit:  
  4.     // Toast.makeText(this, "exit", Toast.LENGTH_LONG).show();  
  5.     this.finish();//關閉Activity  
  6.     break;  
  7. case DELETE:<pre name="code" class="html"><span style="white-space:pre">            </span>//menu.removeGroup(1);//刪除一組菜單  
menu.removeItem(SAVE_AS);//刪除一個菜單break;}return true;}}



sub menu 子菜單

利用xml定義菜單參考options menu。

動態的添加子菜單:

在MenuTestActivity3中:

  1. package cn.sword.activity;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuInflater;  
  7. import android.view.MenuItem;  
  8. import android.view.SubMenu;  
  9. import android.widget.Toast;  
  10.   
  11. public class MenuTestActivity3 extends Activity {  
  12. <span style="white-space:pre">    </span>//定義菜單項  
  13.     private static final int SUBMENU = 10;  
  14.     private static final int SUBITEM1 = SUBMENU+1;  
  15.     private static final int SUBITEM2 = SUBMENU+2;  
  16.     private static final int SUBITEM3 = SUBMENU+3;  
  17.       
  18.     @Override  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         this.setContentView(R.layout.main);  
  22.     }  
  23.       
  24.     public boolean onCreateOptionsMenu(Menu menu){  
  25.         MenuInflater inflater = this.getMenuInflater();  
  26.         inflater.inflate(R.menu.sub_menu, menu);  
  27.         //添加子菜單  
  28.         SubMenu subMenu = menu.addSubMenu(1,SUBMENU,1,"子菜單");  
  29.         subMenu.add(20,SUBITEM1,1,"subitem1");  
  30.         subMenu.add(20,SUBITEM2,2,"subitem2");  
  31.         subMenu.add(30,SUBITEM3,3,"subitem3");  
  32.           
  33.         subMenu.setGroupCheckable(20, true, false);  
  34.         //第二個參數是否可選  
  35.         //當第三個參數爲true時爲這組菜單爲互斥(單選)菜單  
  36.         //當第三個參數爲false時爲組菜單爲複選菜單  
  37.           
  38.         MenuItem item = subMenu.getItem(0);  
  39.         //item.setCheckable(false);//設置該項菜單爲單選或複選  
  40.         item.setChecked(true);//設置菜單的默認選項  
  41.   
  42.         //subMenu.getItem(0).setCheckable(true);  
  43.           
  44.         return true;  
  45.     }  
  46.       
  47.     @Override  
  48.     public boolean onOptionsItemSelected(MenuItem item) {  
  49.         switch(item.getItemId()){  
  50.             case R.id.menuitem1:  
  51.                 Toast.makeText(this,"menuitem1", Toast.LENGTH_LONG).show();  
  52.                 break;  
  53.             case R.id.menuitem2:  
  54.                 Toast.makeText(this,"menuitem2", Toast.LENGTH_LONG).show();  
  55.                 break;  
  56.             case R.id.subitem1:  
  57.                 Toast.makeText(this,"subitem1", Toast.LENGTH_LONG).show();  
  58.                 break;  
  59.             case R.id.subitem2:  
  60.                 Toast.makeText(this,"subitem2", Toast.LENGTH_LONG).show();  
  61.                 break;  
  62.             case SUBITEM1:  
  63.                 Toast.makeText(this,"SUBITEM1", Toast.LENGTH_LONG).show();  
  64.                 break;  
  65.             case SUBITEM2:  
  66.                 Toast.makeText(this,"SUBITEM2", Toast.LENGTH_LONG).show();  
  67.                 //this.finish();//退出程序  
  68.                 break;  
  69.         }  
  70.           
  71.         return super.onOptionsItemSelected(item);  
  72.     }  
  73. }  

在模擬器中點擊Menu鍵:


單擊子菜單:


context menu 上下文菜單:context menu需要綁定在TextView上並在其上按2s後顯示。

在MenuTestActivity4中:

  1. package cn.sword.activity;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.ContextMenu;  
  6. import android.view.ContextMenu.ContextMenuInfo;  
  7. import android.view.MenuInflater;  
  8. import android.view.MenuItem;  
  9. import android.view.View;  
  10. import android.widget.TextView;  
  11. import android.widget.Toast;  
  12.   
  13. public class MenuTestActivity4 extends Activity {  
  14.     @Override  
  15.     protected void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         this.setContentView(R.layout.main);  
  18.         //將上下文菜單綁定到TextView上  
  19.         TextView tv = (TextView) this.findViewById(R.id.textView);  
  20.         this.registerForContextMenu(tv);  
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean onContextItemSelected(MenuItem item) {  
  25.         switch(item.getItemId()){  
  26.             case R.id.subitem1:  
  27.                 Toast.makeText(this, "subitem1",Toast.LENGTH_LONG).show();  
  28.                 break;  
  29.             case R.id.subitem2:  
  30.                 Toast.makeText(this, "subitem2",Toast.LENGTH_LONG).show();  
  31.                 break;  
  32.         }  
  33.         return super.onContextItemSelected(item);  
  34.     }  
  35.   
  36.     //每次上下文菜單顯示都會調用  
  37.     public void onCreateContextMenu(ContextMenu menu, View v,  
  38.             ContextMenuInfo menuInfo) {  
  39.           
  40.         MenuInflater inflater = this.getMenuInflater();  
  41.         inflater.inflate(R.menu.sub_menu, menu);  
  42.         super.onCreateContextMenu(menu, v, menuInfo);  
  43.     }  
  44. }  

運行模擬器,點擊文本內容2s後:


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