Android入门笔记之菜单 (选项菜单和上下文菜单)
2013-09-08 12:23
381 查看
Android入门笔记之菜单(选项菜单和上下文菜单)
<1>简介
选项菜单和上下文菜单都是一个android应用必备的部分。
<2>关键步骤
选项菜单:通过覆盖Activity中的public boolean onCreateOptionsMenu(Menumenu)生成,并通过public boolean onOptionsItemSelected(MenuItem mi)实现事件监听。
上下文菜单:通过覆盖Activity中的public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 生成,并通过public boolean onContextItemSelected(MenuItem mi) 实现事件监听。
<3>出现的问题
无
<4>代码及解释
MenuActivity.java:
<1>简介
选项菜单和上下文菜单都是一个android应用必备的部分。
<2>关键步骤
选项菜单:通过覆盖Activity中的public boolean onCreateOptionsMenu(Menumenu)生成,并通过public boolean onOptionsItemSelected(MenuItem mi)实现事件监听。
上下文菜单:通过覆盖Activity中的public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 生成,并通过public boolean onContextItemSelected(MenuItem mi) 实现事件监听。
<3>出现的问题
无
<4>代码及解释
MenuActivity.java:
package com.ui.menu; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import android.view.SubMenu; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.test.R; public class MenuActivity extends Activity{ /** * @ProjectName: [androidtest] * @Package: [com.ui.menu.MenuActivity.java] * @ClassName: [MenuActivity] * @Description: * @Author: [gmj] * @CreateDate: [2013-9-8 上午10:50:09] * @Version: [v1.0] */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); //为两个文本框注册上下文菜单 this.registerForContextMenu(findViewById(R.id.menuText2)); this.registerForContextMenu(findViewById(R.id.menuText3)); Button btn = (Button) findViewById(R.id.menubutton); btn.setOnCreateContextMenuListener(this); } final int MENU1=1;//每个菜单项目的编号=======begin========= final int MENU2=2; final int MENU3=3; final int MENU4=4; final int MENU5=5;//每个菜单项目的编号=======end============ final int MENU_GENDER_MALE=0; //每个菜单项目的编号=======begin========= final int MENU_GENDER_FEMALE=1; final int MENU_HOBBY1=2; final int MENU_HOBBY2=3; final int MENU_HOBBY3=4; final int MENU_OK=5; final int MENU_GENDER=6; final int MENU_HOBBY=7; //每个菜单项目的编号=======end============ final int GENDER_GROUP=0; //性别子菜单项组的编号 final int HOBBY_GROUP=1; //爱好子菜单项组的编号 final int MAIN_GROUP=2; //外层总菜单项组的编号 MenuItem[] miaHobby=new MenuItem[3];//爱好菜单项组 MenuItem male=null;//男性性别菜单项 //获取当前选择状态的方法 public void appendStateStr() { String result="您选择的性别为:"; if(male.isChecked()) { result=result+"男"; } else { result=result+"女"; } String hobbyStr=""; for(MenuItem mi:miaHobby) { if(mi.isChecked()) { hobbyStr=hobbyStr+mi.getTitle()+"、"; } } if(hobbyStr.length()>0) { result=result+",您的爱好为:"+hobbyStr.substring(0, hobbyStr.length()-1)+"。\n"; } else { result=result+"。\n"; } EditText et=(EditText)this.findViewById(R.id.menuText1); et.append(result); } @Override public boolean onCreateOptionsMenu(Menu menu) { //性别单选菜单项组 菜单若编组就是单选菜单项组 SubMenu subMenuGender = menu.addSubMenu(MAIN_GROUP,MENU_GENDER,0,"gender"); subMenuGender.setIcon(R.drawable.img1); male=subMenuGender.add(GENDER_GROUP, MENU_GENDER_MALE, 0, "male"); male.setChecked(true); subMenuGender.add(GENDER_GROUP, MENU_GENDER_FEMALE, 0, "female"); //设置GENDER_GROUP组是可选择的,互斥的 subMenuGender.setGroupCheckable(GENDER_GROUP, true,true); //爱好复选菜单项组 SubMenu subMenuHobby = menu.addSubMenu(MAIN_GROUP,MENU_HOBBY,0,"hobby"); subMenuHobby.setIcon(R.drawable.img2); miaHobby[0]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY1, 0, "hobby1"); miaHobby[1]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY2, 0, "hobby2"); miaHobby[2]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY3, 0, "hobby3"); miaHobby[0].setCheckable(true);//设置菜单项为复选菜单项 miaHobby[1].setCheckable(true); miaHobby[2].setCheckable(true); //确定菜单项 MenuItem ok=menu.add(MAIN_GROUP,MENU_OK,0,"ok"); OnMenuItemClickListener lsn=new OnMenuItemClickListener() {//实现菜单项点击事件监听接口 @Override public boolean onMenuItemClick(MenuItem item) { appendStateStr(); return true; } }; ok.setOnMenuItemClickListener(lsn);//给确定菜单项添加监听器 //给确定菜单项添加快捷键 ok.setAlphabeticShortcut('o');//设置字符快捷键 //ok.setNumericShortcut('1');//设置数字快捷键 //ok.setShortcut('a', '2');//同时设置两种快捷键 //要注意,同时设置多次时只有最后一个设置起作用 return true; } @Override //单选或复选菜单项选中状态变化后的回调方法 public boolean onOptionsItemSelected(MenuItem mi) { switch(mi.getItemId()) { case MENU_GENDER_MALE://单选菜单项状态的切换要自行写代码完成 case MENU_GENDER_FEMALE: mi.setChecked(true); appendStateStr();//当有效项目变化时记录在文本区中 break; case MENU_HOBBY1://复选菜单项状态的切换要自行写代码完成 case MENU_HOBBY2: case MENU_HOBBY3: mi.setChecked(!mi.isChecked()); appendStateStr();//当有效项目变化时记录在文本区中 break; } return true; } @Override public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {//此方法在每次调出上下文菜单时都会被调用一次 if(v==findViewById(R.id.menubutton)) {//若是第一个文本框 menu.add(0, MENU1, 0, "菜单项1"); menu.add(0, MENU2, 0, "菜单项2"); menu.add(0, MENU3, 0, "菜单项3"); }else if(v==findViewById(R.id.menuText2)) {//若是第一个文本框 menu.add(0, MENU1, 0, "菜单项1"); menu.add(0, MENU2, 0, "菜单项2"); menu.add(0, MENU3, 0, "菜单项3"); } else if(v==findViewById(R.id.menuText3)) {//若是第二个文本框 menu.add(0, MENU4, 0, "菜单项4"); menu.add(0, MENU5, 0, "菜单项5"); } } @Override //菜单项选中状态变化后的回调方法 public boolean onContextItemSelected(MenuItem mi) { switch(mi.getItemId()) { case MENU1: case MENU2: case MENU3: EditText et1=(EditText)this.findViewById(R.id.menuText2); et1.append("\n"+mi.getTitle()+" 被按下"); break; case MENU4: case MENU5: EditText et2=(EditText)this.findViewById(R.id.menuText3); et2.append("\n"+mi.getTitle()+" 被按下"); break; } return true; } }
相关文章推荐
- Android OptionMenu (选项菜单) 和 ContextMenu (上下文菜单) 、 SubMenu (子菜单)
- Android基础知识】选项菜单、上下文菜单、子菜单的使用
- 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
- Android子菜单和选项菜单与上下文菜单的实现
- Android Menu,OptionMenu选项菜单,ContextMenu上下文菜单,Contextual ActionMode,PopUp Menu,PopU pWi ndow
- 【Android基础知识】选项菜单、上下文菜单、子菜单的使用
- Android入门(44)——第六章 使用OptionsMenu实现选项菜单
- [android](学习笔记7)为应用程序添加选项菜单
- 每天一点点:android的选项菜单和其子菜单学习笔记
- Android开发之Menu:OptionMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)
- Android开发之Menu:OptionMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)
- 【Android笔记】选项菜单
- android——3种menus(选项菜单,弹出式菜单,上下文菜单)
- android开发之选项菜单,上下文菜单,子菜单的设置
- Android选项菜单和上下文菜单解析
- Android之选项菜单子菜单学习笔记
- android之三大菜单(子菜单,选项菜单,上下文菜单)
- Android初学笔记-第8讲-菜单(2)-上下文菜单
- ym——Android从零开始(14)(选项菜单+上下文菜单+子菜单)(新)
- Android子菜单和选项菜单与上下文菜单的实现