您的位置:首页 > 移动开发 > Android开发

猴子都能看懂的Android Menu总结

2016-05-09 17:18 417 查看
简单谈谈Android menu菜单的使用,帮助入门的同学。

menu主要分类:

选项菜单:最常规的菜单

子菜单:多层菜单的实现方案之一

上下文菜单:android中长按视图控件后出现的菜单

选项菜单(OptionMenu)

该菜单默认在右上角显示,有两种布局方式,xml布局和java代码布局,首先看一下在XMl中的布局方式

一个简单的代码示例



静态布局(xml):

<group
android:id="@+id/group1"
android:checkableBehavior="single"
android:visible="true">
<item
android:id="@+id/item1"
android:orderInCategory="100"
android:title="111" />
<item
android:id="@+id/item2"
android:orderInCategory="99"
android:title="222" />
</group>


在java代码中创建与监听该menu的点击事件(重写下面两个方法即可)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_first,menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

if(!item.isChecked()) item.setChecked(true);
else item.setChecked(false);
return true;
}


当然,Item除了可以嵌入到Group中,也可以单独添加到menu中,这里就不演示了。关于Item和group的很多方法,方法名基本就可以明白,这里特别注意几个方法:

android:checkableBehavior="single"
,该方法设置item的选择类型,还有all和none两个选择类型,对应如图





注意,有一个showAsAction方法,用于控制Item的显示方式,使用前请务必添加
xmlns:app="http://schemas.android.com/apk/res-auto"
,该方法主要有一下几个选项,看官们一看便知



动态布局(java):

在重写的onCreateOptionsMenu方法中通过menu.add即可添加menu选项。

Demo:



menu.add("333");
menu.add(1,1,1,"香蕉");
menu.add(1,2,2,"苹果");


添加以上代码即可。参数:(int,int,int,String)分别指groupId,ItemID,orderCaterary和ItemText。第一个直接设置了ItemText单独存在。

切记,在默认隐藏的Item中设置icon是无法显示的

子菜单(subMenu)

感觉已经被废弃了,在测试中并不会和很久之前一样显示出一个悬浮的子菜单样式,实际效果如下:



实现代码:

onCreateOptionsMenu添加如下代码:

int base = 1;
SubMenu subMenu = menu.addSubMenu(base, base+1, Menu.NONE, "水果大全");
subMenu.add(base, base+1, base+1, "苹果");
subMenu.add(base, base+2, base+2, "香蕉");
subMenu.add(base, base+3, base+3, "橘子");


那么,如何在xml中实现如下效果呢?答案是嵌套,没错,代码一看便知

<item android:title="水果大全">
<menu >
<item android:title="香蕉"></item>
<item android:title="苹果"></item>
<item android:title="橘子"></item>
</menu>
</item>


效果图:



上下文菜单(ContextMenu)

这里以一个TextView的点击时间为例,长按显示上下文菜单

效果图:



实现流程:

首先注册该View

TextView textView = (TextView)findViewById(R.id.textView);
this.registerForContextMenu(textView);


重写onCreateContextMenuonContextItemSelected

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Hello");
menu.setHeaderIcon(R.mipmap.ic_launcher);
menu.add(1,1,3,"香蕉");
menu.add(1,2,1,"菠萝");
menu.add(1,3,1,"苹果");
}

@Override
public boolean onContextItemSelected(MenuItem item) {
return super.onContextItemSelected(item);
}


上下文菜单与选项菜单最大的不同在于,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们显示地通过registerForContextMenu(View view)来指定。

OK,很简单,就不贴代码了,如果对你有用,欢迎下方点赞,有疑问也可以评论的形式提出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: