简单谈谈Android menu菜单的使用,帮助入门的同学。
选项菜单:最常规的菜单
子菜单:多层菜单的实现方案之一
上下文菜单:android中长按视图控件后出现的菜单
该菜单默认在右上角显示,有两种布局方式,xml布局和java代码布局,首先看一下在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"
,该方法主要有一下几个选项,看官们一看便知
在重写的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是无法显示的
感觉已经被废弃了,在测试中并不会和很久之前一样显示出一个悬浮的子菜单样式,实际效果如下:
实现代码:
在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>
这里以一个TextView的点击时间为例,长按显示上下文菜单
效果图:
实现流程:
首先注册该View
TextView textView = (TextView)findViewById(R.id.textView);
this.registerForContextMenu(textView);
重写onCreateContextMenu和onContextItemSelected
@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,很简单,就不贴代码了,如果对你有用,欢迎下方点赞,有疑问也可以评论的形式提出。