Android学习之菜单

android中包含多种菜单,本例带来的是选项菜单和上下文菜单。

1.选项菜单

在android中,开发者可以在xml文档中部署所要添加的菜单,在后台调用即可。

 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 2 
 3     <item
 4         android:id="@+id/action_add"
 5         android:title="添加"
 6         android:showAsAction="always|withText"/>
 7     <item
 8         android:id="@+id/action_save"
 9         android:title="保存"
10         android:showAsAction="ifRoom"/>
11     <item
12         android:id="@+id/action_discard"
13         android:title="删除"
14         android:showAsAction="ifRoom"/>
15     <item
16         android:id="@+id/action_delete"
17         android:title="删除"
18         android:showAsAction="ifRoom"/>
19     <item
20         android:id="@+id/action_undo"
21         android:title="撤销"
22         android:showAsAction="ifRoom"/>
23 </menu>

在xml中我们定义了几个常用的菜单,添加、删除、保存等。在xml中定义菜单式通过在<menu/>中定义的。<item/>即为菜单项。android最多可以有六个菜单,超出之后android系统会自动将超出的菜单放在更多的菜单项。

1     public boolean onCreateOptionsMenu(Menu menu) {
2         Inflate the menu; this adds items to the action bar if it is present.
3          MenuInflater inflater = getMenuInflater();
4          inflater.inflate(R.menu.main, menu);
5          mOptionsMenu = menu;
6         
7             return super.onCreateOptionsMenu(menu);
8     }

重写onCreateOptionsMenu方法,这里调用已经定义好的menu.xml,可以显示我们刚刚定义的菜单项。

在开发中,菜单也是与事件分不开的。通过onoptionsitemclick,来监听菜单的选中事件。

 1 public boolean onOptionsItemSelected(MenuItem menu)
 2     {
 3     
 4         switch(menu.getItemId())
 5         {
 6         case R.id.action_add:
 7             Toast.makeText(this, "您点击了添加", Toast.LENGTH_LONG).show();
 8             return true;
 9         case R.id.action_delete:
10             Toast.makeText(this, "您点击了删除", Toast.LENGTH_LONG).show();
11             return true;
12         case R.id.action_save:
13             Toast.makeText(this, "您点击了保存", Toast.LENGTH_LONG).show();
14             return true;
15         case R.id.action_undo:
16             Toast.makeText(this, "你点击了撤销", Toast.LENGTH_LONG).show();
17             return true;
18              default:
19                     return super.onOptionsItemSelected(menu);
20         }
21     
22             
23         
24     }

当然,开发人员也可以动态的添加菜单,不需要在xml中预先写好每一个菜单项。

mOptionsMenu.add(1, 1, 1, "添加");第一个参数:菜单项的分组id;第二个参数:菜单项的id;第三个参数:菜单显示顺序的id,android会根据id进行从左到右,从上到下的排序;第四个参数:菜单项的标题

2.子菜单和上下文菜单

在android中,子菜单和菜单是同一级的,可以通过submenu.add添加子菜单。添加一个带复选框的子菜单

 1     public boolean onCreateOptionsMenu(Menu menu) {
 2         // Inflate the menu; this adds items to the action bar if it is present.
 3         // MenuInflater inflater = getMenuInflater();
 4             //inflater.inflate(R.menu.main, menu);
 5            // mOptionsMenu = menu;
 6         SubMenu filesubmenu=menu.addSubMenu(1,1,2,"文件");
 7         MenuItem newMenu=filesubmenu.add(1,2,2,"新建");
 8         newMenu.setCheckable(true);
 9         MenuItem openMenu=filesubmenu.add(2,3,3,"打开");
10         filesubmenu.setGroupCheckable(2, true, true);
11             return super.onCreateOptionsMenu(menu);
12     }

上下文菜单可以和任意的view关联,而且它必须关联一个view,例如button、textview等。

 1 public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInof)
 2     
 3     {
 4         super.onCreateContextMenu(menu, view, menuInof);
 5         menu.add("上下文菜单");
 6         menu.add(0,ITEM1,Menu.NONE,"放大").setCheckable(true).setChecked(true);
 7         menu.add(20,ITEM2,Menu.NONE,"缩小");
 8         menu.add(20,ITEM3,Menu.NONE,"平移");
 9         menu.setGroupCheckable(20, true, true);
10         SubMenu sub=menu.addSubMenu(0,4,Menu.NONE,"子菜单");
11         sub.add("子菜单1");
12         sub.add("子菜单2");
13     }

上下文菜单中可以添加子菜单的。上下文菜单在添加中,需要注册。

Button button9=(Button)findViewById(R.id.button9); registerForContextMenu(button9);

这里将定义的上下文菜单注册到button9中。

如果想实现对上下文菜单选择时间的监听,oncontextitemselected方法实现。

 1      public boolean onContextItemSelected(MenuItem item){       
 2             switch(item.getItemId()){
 3             case ITEM1:
 4                 //在这里添加处理代码
 5                 Toast.makeText(this, "点击了放大", 5000).show();
 6                 return true;
 7             case ITEM2:
 8                 //在这里添加处理代码
 9                 Toast.makeText(this, "点击了缩小", 5000).show();
10                 break;    
11             case ITEM3:
12                 //在这里添加处理代码
13                 
14                 break;
15             }
16             return true;
17         }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏三流程序员的挣扎

Android 动画总结(2) - 帧动画

Frame Animation,也叫 Drawable Animation,原理就类似视频快速播放一帧一帧的图片。一般场景下很少使用,工作中遇到的是有时会有背景...

12120
来自专栏学海无涯

Android开发之DrawerLayout实现抽屉效果

谷歌官方推出了一种侧滑菜单的实现方式(抽屉效果),即 DrawerLayout,这个类是在Support Library里的,需要加上android-suppo...

1.6K60
来自专栏Android机动车

一个小彩蛋

今天要介绍的就是大神的 Scalpel,可以实现在手机上 3D 展示届满布局,而且用起来超级简单!

13030
来自专栏Android-薛之涛

Android-ConstraintLayout详解(下)

我们接着上一篇说一说ConstraintLayout的其他属性,如果没看过上一篇:Android-ConstraintLayout详解 先罗列一下此次的会议内...

21730
来自专栏林德熙的博客

win10 UWP ListView

如果发现 UWP ListView 横向没有滚动条,可以使用 ScrollViewer 添加

9720
来自专栏向治洪

React Native组件之Button

不管在Android还是ios开发中,系统都有Button组件,而在早期的React Native中,系统是不提供Button组件的,一般会使用一个叫做reac...

236100
来自专栏非著名程序员

教你如何用 RecyclerView 做一个好用的轮播图

引子 一般情况下,我们手机 App 上轮播图一般都是几张图来回循环,最多也就10几张,一般都是在10张以内的轮播。所以我们一般可能都是自己写,还有可能用到了别人...

25150
来自专栏技术专栏

java thumbnailator 做图片处理

23010
来自专栏非著名程序员

AndroidTShare Weekly No.10

本周热点开源项目 SpinMenu 转动轮盘样式的Fragment切换效果,非常漂亮。 效果图如下: ? 作者:Hitomi 项目开源地址:https://gi...

215100
来自专栏Sorrower的专栏

界面无小事(九): 做个好看的伸缩头部

17220

扫码关注云+社区

领取腾讯云代金券