Android用戶界面的組成除了View外,還包括菜單和對話框,本節我們先來學習一下菜單的使用方法。
菜單Menu是Android用戶界面中最常見的元素之一,使用非常頻繁。Android菜單主要分為三類:選項菜單(Options Menu)、上下文菜單(Context Menu)、子菜單(Submenu)。
一、選項菜單和子菜單
一個Menu對象代表一個菜單,Menu中可添加菜單項MenuItem,也可以添加子菜單SubMenu。
Java代碼
- @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 subMenuGender=menu.addSubMenu(MAIN_GROUP, MENU_GENDER, 0,"性別");
- subMenuGender.setIcon(R.drawable.gender);
- subMenuGender.setHeaderIcon(R.drawable.gender);
- male=subMenuGender.add(GENDER_GROUP,MENU_GENDER_MALE, 0, "男");//為子菜單添加選項
- male.setChecked(true);//設置默認選項
- subMenuGender.add(GENDER_GROUP,MENU_GENDER_FEMALE, 0, "女");//為子菜單添加選項
- subMenuGender.setGroupCheckable(GENDER_GROUP, true, true);//設置GENDER_GROUP組是可選的、互斥的
-
- //添加興趣子菜單
- SubMenu subMenuHobby=menu.addSubMenu(MAIN_GROUP, MENU_HOBBY, 1, "愛好");
- subMenuHobby.setIcon(R.drawable.hobby);
- miaHobby[0]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY1, 0, "游泳");
- miaHobby[1]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY2, 1, "籃球");
- miaHobby[2]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY3, 2, "跑步");
- miaHobby[0].setCheckable(true);
- miaHobby[1].setCheckable(true);
- miaHobby[2].setCheckable(true);//設置為可多選
-
- MenuItem ok=menu.add(MAIN_GROUP, MENU_OK, 3, "確定");//為主菜單添加選項菜單
- OnMenuItemClickListener lsn=new OnMenuItemClickListener() {
-
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- // TODO Auto-generated method stub
- appendStateStr();
- return true;
- }
- };
- ok.setOnMenuItemClickListener(lsn);
- ok.setAlphabeticShortcut('o');//給確定菜單設置字符快捷鍵
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // TODO Auto-generated method stub
- switch(item.getItemId()){
- case MENU_GENDER_MALE:
- case MENU_GENDER_FEMALE:
- item.setChecked(true);
- appendStateStr();
- break;
- case MENU_HOBBY1:
- case MENU_HOBBY2:
- case MENU_HOBBY3:
- item.setChecked(!item.isChecked());
- appendStateStr();
- break;
- }
- return true;
- }
-
- private void appendStateStr() {
- // TODO Auto-generated method stub
- String result="您選擇的性別是:";
- if(male.isChecked()){
- result+="男";
- }else{
- result+="女";
- }
- String hobbyStr="";
- for(MenuItem mi:miaHobby){
- if(mi.isChecked()){
- hobbyStr+=mi.getTitle()+"、";
- }
- }
- if(hobbyStr.length()>0){
- result+=",您的愛好為:"+hobbyStr.substring(0,hobbyStr.length()-1)+".\n";
- }else{
- resultresult=result+".\n";
- }
- Toast.makeText(mainActivity.this, result, Toast.LENGTH_LONG).show();
- }
下面是此程序運行的結果,大家可以對照著代碼觀察效果:
二、上下文菜單
上下文菜單是注冊到某個View對象上的,如果一個View對象注冊了上下文菜單,用戶可通過長按該View對象彈出上下文菜單.
首先在onCreateContextMenu中為不同空間配置不同的上下文菜單:
Java代碼
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- // TODO Auto-generated method stub
- super.onCreateContextMenu(menu, v, menuInfo);
- menu.setHeaderIcon(R.drawable.bird);
- if(v==findViewById(R.id.editview01)){
- menu.add(0,1,0,"菜單項1");
- menu.add(0,2,0,"菜單項2");
- menu.add(0,3,0,"菜單項3");
- }else if(v==findViewById(R.id.editview02)){
- menu.add(0,4,0,"菜單項4");
- menu.add(0,5,0,"菜單項5");
- }
- }
在onCreate方法中為兩個文本框注冊上下文菜單:
Java代碼
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- this.registerForContextMenu(findViewById(R.id.editview01));
- this.registerForContextMenu(findViewById(R.id.editview02));
- }
添加上下文菜單監聽事件:
Java代碼
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- // TODO Auto-generated method stub
- switch(item.getItemId()){
- case 1:
- case 2:
- case 3:
- Toast.makeText(mainActivity.this, "這是第一個EditView的上下文菜單"+item.getTitle(), Toast.LENGTH_LONG).show();
- case 4:
- case 5:
- Toast.makeText(mainActivity.this, "這是第二個EditView的上下文菜單"+item.getTitle(), Toast.LENGTH_LONG).show();
-
- }
- return super.onContextItemSelected(item);
- }
下面兩圖是Android上下文菜單實例的運行效果:
通過三種Android菜單的詳細講解,大家應該對菜單的使用有所了解了,在以後的Android開發過程中可以多熟悉下。