Android入门学习(13)
------简单实用菜单menu
Menu有两种加载方法,可以再java代码中加入,也可以再res/menu下的.xml文件下配置完成。
一java代码中使用
1、覆盖Activity的onCreateOptionsMenu(Menu menu)函数
2、 调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标
3、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件,利用返回值可以调用时件函数。
具体事例:
/**
*返回值为boobean,静态的添加了菜单项
*/
publicboolean onCreateOptionsMenu(Menu menu)
{
menu.add(0,0,0,R.string.app_about);
menu.add(0,1,1,R.string.app_exit);
returnsuper.onCreateOptionsMenu(menu);
}
解释下menu.add()方法:
应用android SDK/doc,此方法有很对重载方法,这里只引用一处。
public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)
Add a new item to themenu. This item displays the given title for its label.
Parameters
groupId | The group identifier that this item should be part of. This can be used to define groups of items for batch state changes. Normally use NONE if an item should not be in a group. |
itemId | Unique item ID. Use NONE if you do not need a unique ID. |
order | The order for the item. Use NONE if you do not care about the order. See |
title | The text to display for the item. |
publicabstract MenuItem add (int groupId, int itemId, int order, inttitleRes)
参数说明:
groudId:是指组ID,用以批量地对菜单子项进行处理和排序
itemId:是子项ID,是每一个菜单子项的唯一标识
order:指定菜单子项在选项菜单中的排列顺序
titlerRes:菜单标题的引用
/** *对user的选择做出判断 */publicboolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch(item.getItemId()) { case 0: openOptionsDialog(); //响应时间 break; case 1: finish(); break; } returntrue; } /***点击处理函数。类似于按钮监听*/privatevoid openOptionsDialog() { // 这里写要处理的方法行为 }还可以为menu设置图像:public boolean onCreateOptionsMenu(Menumenu) { menu.add(0, ITEM, 0, "下载").setIcon(R.drawable.download);//设置图标 return true; }
二再xml中配置和上面可以实现相同效果
1, 再res下建立menu文件夹,在内建立menufail.xml文件
<?xmlversion="1.0"encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/grout_main">
<itemandroid:id="@+id/menu_a"
android:title="关于"/>
<itemandroid:id="@+id/menu_b"
android:title="退出"/>
</group>
</menu>
2 覆盖Activity的onCreateOptionsMenu(Menu menu)函数
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater =getMenuInflater();
inflater.inflate(R.menu.menufile,menu);
returntrue;
}
二SubMenu
步骤和上基本一样,代码有区别,重写时:
publicboolean onCreateOptionsMenu(Menu menu)
{
SubMenu subMenu = menu.addSubMenu(1, 100, 100, "选我");
subMenu.add(2, 101, 101, "男人");
subMenu.add(2, 102, 102, "女人");
returnsuper.onCreateOptionsMenu(menu);
}
3。Context Menu
首先在main.xml里定义若干个按钮。然后覆盖onCreateContextMenu(ContextMenu menu,View v, ContextMenuInfo menuInfo)方法。里面的代码如下:
首先要注册一下,在onCreate方法里,如下代码:
代码
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b1 = (Button)findViewById(R.id.b1);
b2 = (Button)findViewById(R.id.b2);
registerForContextMenu(b1);
registerForContextMenu(b2);
}
代码
@Override
publicvoid onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
if(v==b1){
menu.setHeaderTitle("这是1");
menu.add(200, 200, 200,"Context Menu 1");
menu.add(200, 201, 201, "ContextMenu 2");
}
elseif(v==b2){
menu.setHeaderTitle("这是2");
menu.add(300, 300, 300,"C 1");
menu.add(300, 301, 301,"C 2");
}
super.onCreateContextMenu(menu, v, menuInfo);
}