当前位置:操作系统 > 安卓/Android >>

Android Menu菜单

一、Android提供了一些简单的方法来为应用添加Menu菜单。

提供了三种类型应用菜单:

1、Options Menu:通过Menu按钮调用菜单

2、Context Menu:通过长按屏幕,调用注册了的上下文菜单

3、Submenu:通过触摸Menu Item,调用子菜单选项

 


二、下面通过案例,来介绍如何定义Menu菜单、处理选项事件。

1、在/res/目录下新建menu文件夹,用于存储Menu XML资源文件

2、在/res/menu/下新建menu1.xml菜单界面描述文件


[html] <?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android">   
    <item android:id="@+id/menu1" android:title="菜单1" />   
    <item android:id="@+id/menu2" android:title="菜单2" />   
</menu> 
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/menu1" android:title="菜单1" /> 
    <item android:id="@+id/menu2" android:title="菜单2" /> 
</menu>

3、显示菜单,需重写Activity中onCreateOptionsMenu(Menu menu)方法


[java] @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu1, menu);//调用第二步中定义的Menu界面描述文件  
    return true; 

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.menu1, menu);//调用第二步中定义的Menu界面描述文件
  return true;
 }onCreateOptionsMenu,当用户触击Menu按钮时,会调用这个方法。

 

4、设置“菜单1”、“菜单2”的选中事件


  @Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show(); 
    return super.onOptionsItemSelected(item); 

    @Override
 public boolean onOptionsItemSelected(MenuItem item) {
     Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show();
  return super.onOptionsItemSelected(item);
 }这里将每次选中的选项ID显示在屏幕上。

 

5、重写Activity中onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo)


[java]    @Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
        ContextMenuInfo menuInfo) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu1, menu); 
    super.onCreateContextMenu(menu, v, menuInfo); 

    @Override
 public void onCreateContextMenu(ContextMenu menu, View v,
   ContextMenuInfo menuInfo) {
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.menu1, menu);
  super.onCreateContextMenu(menu, v, menuInfo);
 }
之后当用户长按屏幕时,将会显示菜单项。

 


6、设置上下文菜单选项的选中事件


[java]  @Override 
public boolean onContextItemSelected(MenuItem item){ 
    Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show(); 
    return super.onContextItemSelected(item); 

    @Override
    public boolean onContextItemSelected(MenuItem item){
     Toast.makeText(this, String.valueOf(item.getItemId()), Toast.LENGTH_LONG).show();
     return super.onContextItemSelected(item);
    }这里仅显示选中选项的ID

效果截图:

  \


 

三、创建子菜单、单选子菜单、多选子菜单

1、子菜单

在<item/>标签内嵌套<menu/>

[html]  <menu 
  xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/submenu" 
          android:title="菜单项1"> 
        <menu> 
            <item android:id="@+id/submenu_item1" 
                  android:title="子菜单项1" /> 
        </menu> 
    </item> 
</menu> 
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/submenu"
          android:title="菜单项1">
        <menu>
            <item android:id="@+id/submenu_item1"
                  android:title="子菜单项1" />
        </menu>
    </item>
</menu>
2、单选子菜单、多选子菜单
使用group标签,设置属性android:checkableBehavior其中的三个值:single、all、none


single设置为单选,all为多选,none为普通选项

更多的属性说明可以阅读文档:http://android.toolib.net/guide/topics/resources/menu-resource.html

多选示例:

[html]  <?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android">   
    <item android:id="@+id/csubmenu3" android:title="多选菜单">   
        <menu>   
            <group android:checkableBehavior="all">   
                <item android:title="子菜单1"/>   
                <item android:title="子菜单2"/>   
                <item android:title="子菜单3"/>   
            </group>   
        </menu>   
    </item> 
</menu> 
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://sche

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,