Android学习笔记十九之Menu菜单.docx
- 文档编号:18496940
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:16
- 大小:50.14KB
Android学习笔记十九之Menu菜单.docx
《Android学习笔记十九之Menu菜单.docx》由会员分享,可在线阅读,更多相关《Android学习笔记十九之Menu菜单.docx(16页珍藏版)》请在冰点文库上搜索。
Android学习笔记十九之Menu菜单
Android学习笔记十九之Menu菜单
之前我们已经学习过Android的基本UI控件和Android的五大布局LinearLayout线性布局、RelativeLayout相对布局、FrameLayout帧布局、GridLayout网格布局和TableLayout表格布局,下面我们来学习Android的其他控件,这些控件能让我们的APP更加友好和人性化。
Menu菜单
今天我们来学习第一个友好交互控件,Menu菜单。
在AndroidOS中,Menu菜单有三种,分别是:
OptionMenu(选项菜单)、ContextMenu(上下文菜单)和SubMenu(子菜单)。
下面我们分别来介绍一下它们。
OptionMenu选项菜单
OptionMenu是Android中最常见的菜单,通过手机上的Menu键可以唤出。
使用方法非常简单,只需要重写onCreateOptionsMenu(Menumenu)和onOptionsItemSelected(MenuItemitem)这两个方法即可,前者是OptionMenu创建的时候调用,完成初始化,只调用一次;后者是菜单项被选中是触发的事件,在这里完成Menu选项事件处理。
除了这两个方法之外,我们还可以重写OptionMenu的以下三个方法:
onOptionsMenuClosed(Menumenu)菜单关闭时候回调方法、onPrepareOptionsMenu(Menumenu)菜单显示前回调方法、onMenuOpened(intfeatureId,Menumenu)菜单打开之后回调方法。
下面我们通过一个例子说明:
Activity代码:
packagecom.example.menudemo;
importandroid.os.Bundle;
importandroid.support.annotation.Nullable;
importandroid.support.v7.app.AppCompatActivity;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.widget.TextView;
/**
*CreatedbyDevinon2016/7/4.
*/
publicclassOptionMenuActivityextendsAppCompatActivity{
privatefinalstaticintBASKETBALL=10001;
privatefinalstaticintFOOTBALL=10002;
privatefinalstaticintVOLLEYBALL=10003;
privatefinalstaticintBALLOON=10004;
privatefinalstaticintPINGPONG=10005;
privatefinalstaticintBASEBALL=10006;
privateTextViewtv_option_menu;
@Override
protectedvoidonCreate(@NullableBundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_optionmenu);
tv_option_menu=(TextView)findViewById(R.id.tv_option_menu);
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
//intgroupId,intitemId,intorder,CharSequencetitle
menu.add(1,BASKETBALL,2,"篮球");
menu.add(1,FOOTBALL,3,"足球");
menu.add(1,VOLLEYBALL,4,"排球");
menu.add(1,BALLOON,5,"气球");
menu.add(1,PINGPONG,6,"乒乓球");
menu.add(1,BASEBALL,7,"棒球");
returntrue;
}
@Override
publicbooleanonOptionsItemSelected(MenuItemitem){
switch(item.getItemId()){
caseBASKETBALL:
tv_option_menu.setText("你喜欢篮球吗?
");
break;
caseFOOTBALL:
tv_option_menu.setText("你喜欢足球吗?
");
break;
caseVOLLEYBALL:
tv_option_menu.setText("你喜欢排球吗?
");
break;
caseBALLOON:
tv_option_menu.setText("你喜欢气球吗?
");
break;
casePINGPONG:
tv_option_menu.setText("你喜欢乒乓球吗?
");
break;
caseBASEBALL:
tv_option_menu.setText("你喜欢棒球吗?
");
break;
}
returnsuper.onOptionsItemSelected(item);
}
}
实现效果图:
这里实现比较简单,就不在做很多的介绍了。
添加菜单有两种方法,可以通过定义XML文件,然后调用getMenuInflater().inflate(R.menu.menu_main,menu)加载,也可以像上面例子一样通过代码添加,即是add的方法。
ContextMenu上下文菜单
当我们长时间按住一个View组件的时候,会弹出一个菜单,那个菜单就是ContextMenu。
使用ContextMenu需要经历如下三个步骤:
第一步是重写onCreateContextMenu(ContextMenumenu,Viewview,ContextMenuInfomenuInfo)方法,第二步是为view组件注册上下文菜单,即是调用registerForContextMenu(View)方法,第三步是给菜单项指定事件监听器,即是重写onContextItemSelected(MenuItemitem)方法,下面我们用一个例子说明一下:
上面我们已经实现了用代码加载菜单项,现在我们采用XML文件来加载菜单项,这样修改的时候只需要修改XML文件即可,也减轻了Java代码的臃肿。
Activity代码:
packagecom.example.menudemo;
importandroid.os.Bundle;
importandroid.support.annotation.Nullable;
importandroid.support.v7.app.AppCompatActivity;
importandroid.view.ContextMenu;
importandroid.view.MenuInflater;
importandroid.view.MenuItem;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.Toast;
/**
*CreatedbyDevinon2016/7/4.
*/
publicclassContextMenuActivityextendsAppCompatActivity{
privateButtonbtn_show_context_menu;
@Override
protectedvoidonCreate(@NullableBundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contextmenu);
btn_show_context_menu=(Button)findViewById(R.id.btn_show_context_menu);
registerForContextMenu(btn_show_context_menu);
}
@Override
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenu.ContextMenuInfomenuInfo){
MenuInflatermenuInflater=newMenuInflater(this);
menuInflater.inflate(R.menu.context_menu,menu);
super.onCreateContextMenu(menu,v,menuInfo);
}
@Override
publicbooleanonContextItemSelected(MenuItemitem){
switch(item.getItemId()){
caseR.id.basketball:
Toast.makeText(getApplicationContext(),"你选择了篮球",Toast.LENGTH_SHORT).show();
break;
caseR.id.football:
Toast.makeText(getApplicationContext(),"你选择了足球",Toast.LENGTH_SHORT).show();
break;
caseR.id.baseball:
Toast.makeText(getApplicationContext(),"你选择了棒球",Toast.LENGTH_SHORT).show();
break;
caseR.id.pingpang:
Toast.makeText(getApplicationContext(),"你选择了乒乓球",Toast.LENGTH_SHORT).show();
Bak;
caseR.id.balloon:
Toast.makeText(getApplicationContext(),"你选择了汽球",Toast.LENGTH_SHORT).show();
break;
}
returnsuper.onContextItemSelected(item);
}
}
menu中XML代码:
xmlversion="1.0"encoding="utf-8"?
>
android: id="@+id/context_menu_item" android: checkableBehavior="none"> android: id="@+id/basketball" android: title="篮球"/> android: id="@+id/football" android: title="足球"/> android: id="@+id/baseball" android: title="棒球"/> android: id="@+id/pingpang" android: title="乒乓球"/> android: id="@+id/balloon" android: title="汽球"/>
实现的效果图:
布局文件比较简单,就不在贴出代码了。
其中,需要在res目录下新建一个文件夹menu。
SubMenu子菜单
子菜单相当于在菜单的item中又嵌套一层菜单。
就不多介绍了,下面我们直接实现一个例子:
Activity代码:
packagecom.example.menudemo;
importandroid.os.Bundle;
importandroid.support.annotation.Nullable;
importandroid.support.v7.app.AppCompatActivity;
importandroid.view.ContextMenu;
importandroid.view.MenuInflater;
importandroid.view.MenuItem;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.TextView;
/**
*CreatedbyDevinon2016/7/4.
*/
publicclassSubMenuActivityextendsAppCompatActivity{
privateButtonbtn_show_sub_menu;
privateTextViewtv_show_sub;
@Override
protectedvoidonCreate(@NullableBundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_submenu);
btn_show_sub_menu=(Bton)findViewById(R.id.btn_show_sub_menu);
registerForContextMenu(btn_show_sub_menu);
tv_show_sub=(TextView)findViewById(R.id.tv_show_sub);
}
@Override
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenu.ContextMenuInfomenuInfo){
MenuInflatermenuInflater=newMenuInflater(this);
menuInflater.inflate(R.menu.sub_menu,menu);
super.onCreateContextMenu(menu,v,menuInfo);
}
@Override
publicbooleanonContextItemSelected(MenuItemitem){
switch(item.getItemId()){
caseR.id.app:
tv_show_sub.setText("你选择的是水果类的苹果");
break;
caseR.id.pear:
tv_show_sub.setText("你选择的是水果类的雪梨");
break;
caseR.id.grape:
tv_show_sub.setText("你选择的是水果类的葡萄");
break;
caseR.id.sub_basketball:
tv_show_sub.setText("你选择的是球类的篮球");
break;
caseR.id.sub_football:
tv_show_sub.setText("你选择的是球类的足球");
break;
caseR.id.sub_balloon:
tv_show_sub.setText("你选择的是球类的汽球");
break;
caseR.id.java:
tv_show_sub.setText("你选择的是语言类的Java");
break;
caseR.id.Swift:
tv_show_sub.setText("你选择的是语言类的swift");
break;
caseR.id.php:
tv_show_sub.setText("你选择的是语言类的PHP");
break;
}
returnsuper.onContextItemSelected(item);
}
}
menu的XML文件代码:
xmlversion="1.0"encoding="utf-8"?
>
android=" checkableBehavior="none"> android: id="@+id/fruit" android: title="水果"> checkableBehavior="none"> android: id="@+id/app" android: title="苹果"/> android: id="@+id/pear" android: title="雪梨"/> android: id="@+id/grape" android: title="葡萄"/> android: id="@+id/ball" android: title="球类"> checkableBehavior="none"> android: id="@+id/sub_basketball" android: title="篮球"/> android: id="@+id/sub_football" android: title="足球"/> android: id="@+id/sub_balloon" android: title="气球"/> android: id="@+id/language" android: title="语言"> checkableBehavior="none"> android: id="@+id/java" android: title="JAVA"/> android: id="@+id/Swift" android: title="Swift"/> android: id="@+id/php" android: title="PHP"/> 实现的效果图: 这里实现的是非常简单的,更加复杂就按需要实现。 最后还介绍一个PopupMenu(弹出式菜单),直接实现一个小例子 java代码: btn_popup_menu=(Button)findViewById(R.id.btn_popup_menu); btn_popup_menu.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewview){ PopupMenupopupMenu=newPopupMenu(MainActivity.this,btn_option_menu); popupMenu.getMenuInflater().inflate(R.menu.popup_menu,popupMenu.getMenu()); popupMenu.setOnMenuItemClickListener(newPopupMenu.OnMenuItemClickListener(){ @Override publicbooleanonMenuItemClick(MenuItemitem){ switch(item.getItemId()){ caseR.id.popup_java: Toast.makeText(MainActivity.this,"你选择了JAVA语言",Toast.LENGTH_SHORT).show(); break; caseR.id.popup_Swift: Toast.makeText(MainActivity.this,"你选择了Swift语言",Toast.LENGTH_SHORT).show(); break; caseR.id.popup_php: Toast.makeText(MainActivity.this,"你选择了PHP语言",Toast.LENGTH_SHORT).show(); break; } returntrue; } }); popupMenu.show(); } }); menu的XML文件代码: xmlversion="1.0"encoding="utf-8"? > android=" checkableBehavior="none"> android: id="@+id/popup_java" android: title="JAVA"/> android: id="@+id/popup_Swift" android: title="Swift"/> android: id="@+id/popup_php" android: title="PHP"/> 实现的效果图: 到这里就基本介绍完了Menu的基本知识,我们可以使用menu实现很多的功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 学习 笔记 十九 Menu 菜单