android--菜单
16lz
2021-01-26
android中菜单分为三种,分别是,options menu 选项菜单,sub menu 子菜单,context menu 上下文菜单。下面分别举例演示这三种菜单:
新建一个android project,
options menu,第一种方法,通过xml定义选项菜单,在res文件夹中新建一个名为menu的文件夹,在其内新建一个options_menu.xml的文件:
view plain copy to clipboard print ?- <?xmlversion="1.0"encoding="utf-8"?>
- <menuxmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/newFile"
- android:icon="@drawable/ic_launcher"
- android:title="@string/newFile"
- />
- <!--android:icon设置菜单选项的图标
- android:title设置菜单选项的标题-->
- <item
- android:id="@+id/exit"
- android:icon="@drawable/ic_launcher"
- android:title="@string/exit"
- />
- </menu>
在MenuTestActivity1中: view plain copy to clipboard print ?
- packagecn.sword.activity;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.Menu;
- importandroid.view.MenuInflater;
- importandroid.view.MenuItem;
- importandroid.view.MenuItem.OnMenuItemClickListener;
- importandroid.widget.Toast;
- publicclassMenuTestActivity1extendsActivityimplementsOnMenuItemClickListener{
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- MenuInflaterinflater=this.getMenuInflater();
- inflater.inflate(R.menu.options_menu,menu);
- //第一种响应菜单点击事件的方法
- //为每一个菜单选项添加监听事件
- //在覆盖的onMenuItemClick()方法中判断并触发监听事件
- for(inti=0;i<menu.size();i++){
- menu.getItem(i).setOnMenuItemClickListener((OnMenuItemClickListener)this);
- }
- returnsuper.onCreateOptionsMenu(menu);
- }
- /*第二种响应菜单点击事件的方法覆盖onOptionsItemSelected()方法
- @Override
- publicbooleanonOptionsItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseR.id.newFile:
- Toast.makeText(this,"newFile",Toast.LENGTH_LONG).show();
- break;
- caseR.id.exit:
- this.finish();//退出程序
- break;
- }
- returnsuper.onOptionsItemSelected(item);
- }*/
- publicbooleanonMenuItemClick(MenuItemitem){
- switch(item.getItemId()){
- caseR.id.newFile:
- Toast.makeText(this,"newFile",Toast.LENGTH_LONG).show();
- break;
- caseR.id.exit:
- this.finish();
- }
- returnfalse;
- }
- }
在模拟器中点击Menu键效果:
options menu,第二种方法,动态添加删除菜单
在MenuTestActivity2中:
- packagecn.class3g.activity;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.Menu;
- importandroid.view.MenuInflater;
- importandroid.view.MenuItem;
- importandroid.widget.Toast;
- publicclassMenuTestActivity2extendsActivity{
- <spanstyle="white-space:pre"></span>//定义菜单项
- privatestaticfinalintSAVE=1;
- privatestaticfinalintSAVESAVE_AS=SAVE+1;
- privatestaticfinalintDELETE=SAVE+2;
- //声明一个menu对象
- Menumenu=null;
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- publicbooleanonCreateOptionsMenu(Menumenu){
- MenuInflaterinflater=this.getMenuInflater();
- inflater.inflate(R.menu.options_menu,menu);
- //向菜单中添加菜单项
- menu.add(1,SAVE,1,"保存");
- menu.add(1,SAVE_AS,2,"另存为");
- menu.add(1,DELETE,3,"删除保存");
- //设置菜单项的图标
- menu.findItem(SAVE).setIcon(R.drawable.ic_launcher);
- this.menu=menu;
- returntrue;
- }
- <spanstyle="white-space:pre"></span>//动态的修改菜单title
- inti=1;
- publicbooleanonPrepareOptionsMenu(Menumenu){
- MenuItemitem=menu.findItem(SAVE_AS);
- item.setTitle(item.getTitle()+""+i);
- i++;
- returnsuper.onPrepareOptionsMenu(menu);
- }
- lt;spanstyle="white-space:pre"></span>//响应菜单单击事件
- publicbooleanonOptionsItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseR.id.newFile:
- Toast.makeText(this,"newfile",Toast.LENGTH_LONG).show();//利用Toast弹出文本信息
- break;
- caseR.id.exit:
- //Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
- this.finish();//关闭Activity
- break;
- caseDELETE:<prename="code"class="html"><spanstyle="white-space:pre"></span>//menu.removeGroup(1);//删除一组菜单
sub menu 子菜单
利用xml定义菜单参考options menu。
动态的添加子菜单:
在MenuTestActivity3中:
view plain copy to clipboard print ?- packagecn.sword.activity;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.Menu;
- importandroid.view.MenuInflater;
- importandroid.view.MenuItem;
- importandroid.view.SubMenu;
- importandroid.widget.Toast;
- publicclassMenuTestActivity3extendsActivity{
- <spanstyle="white-space:pre"></span>//定义菜单项
- privatestaticfinalintSUBMENU=10;
- privatestaticfinalintSUBITEM1=SUBMENU+1;
- privatestaticfinalintSUBITEM2=SUBMENU+2;
- privatestaticfinalintSUBITEM3=SUBMENU+3;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.main);
- }
- publicbooleanonCreateOptionsMenu(Menumenu){
- MenuInflaterinflater=this.getMenuInflater();
- inflater.inflate(R.menu.sub_menu,menu);
- //添加子菜单
- SubMenusubMenu=menu.addSubMenu(1,SUBMENU,1,"子菜单");
- subMenu.add(20,SUBITEM1,1,"subitem1");
- subMenu.add(20,SUBITEM2,2,"subitem2");
- subMenu.add(30,SUBITEM3,3,"subitem3");
- subMenu.setGroupCheckable(20,true,false);
- //第二个参数是否可选
- //当第三个参数为true时为这组菜单为互斥(单选)菜单
- //当第三个参数为false时为组菜单为复选菜单
- MenuItemitem=subMenu.getItem(0);
- //item.setCheckable(false);//设置该项菜单为单选或复选
- item.setChecked(true);//设置菜单的默认选项
- //subMenu.getItem(0).setCheckable(true);
- returntrue;
- }
- @Override
- publicbooleanonOptionsItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseR.id.menuitem1:
- Toast.makeText(this,"menuitem1",Toast.LENGTH_LONG).show();
- break;
- caseR.id.menuitem2:
- Toast.makeText(this,"menuitem2",Toast.LENGTH_LONG).show();
- break;
- caseR.id.subitem1:
- Toast.makeText(this,"subitem1",Toast.LENGTH_LONG).show();
- break;
- caseR.id.subitem2:
- Toast.makeText(this,"subitem2",Toast.LENGTH_LONG).show();
- break;
- caseSUBITEM1:
- Toast.makeText(this,"SUBITEM1",Toast.LENGTH_LONG).show();
- break;
- caseSUBITEM2:
- Toast.makeText(this,"SUBITEM2",Toast.LENGTH_LONG).show();
- //this.finish();//退出程序
- break;
- }
- returnsuper.onOptionsItemSelected(item);
- }
- }
在模拟器中点击Menu键:
单击子菜单:
context menu 上下文菜单:context menu需要绑定在TextView上并在其上按2s后显示。
在MenuTestActivity4中:
view plain copy to clipboard print ?- packagecn.sword.activity;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.ContextMenu;
- importandroid.view.ContextMenu.ContextMenuInfo;
- importandroid.view.MenuInflater;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- publicclassMenuTestActivity4extendsActivity{
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.main);
- //将上下文菜单绑定到TextView上
- TextViewtv=(TextView)this.findViewById(R.id.textView);
- this.registerForContextMenu(tv);
- }
- @Override
- publicbooleanonContextItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseR.id.subitem1:
- Toast.makeText(this,"subitem1",Toast.LENGTH_LONG).show();
- break;
- caseR.id.subitem2:
- Toast.makeText(this,"subitem2",Toast.LENGTH_LONG).show();
- break;
- }
- returnsuper.onContextItemSelected(item);
- }
- //每次上下文菜单显示都会调用
- publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
- ContextMenuInfomenuInfo){
- MenuInflaterinflater=this.getMenuInflater();
- inflater.inflate(R.menu.sub_menu,menu);
- super.onCreateContextMenu(menu,v,menuInfo);
- }
- }
运行模拟器,点击文本内容2s后:
更多相关文章
- Golang MD5算法与 java(android)的互通
- CrossWalk项目main_delegate类的问题
- Hardcoded string "xxxxxxxxxxxx", should use @string resource
- android ui 遇到的问题汇总
- android 点击获取验证码显示倒计时并不可用
- Android(安卓)Studio使用技巧
- Android(安卓)应用第一次运行时,引导页面的设置方法(只让程序Aciti
- android 学习四 加载图片
- Android用户界面 UI组件--TextView及其子类(三) EditView以及各