菜单Menu(AS开发实战第四章学习笔记)

4.5 菜单Menu

Android的菜单主要分两种,一种是选项菜单OptionMenu,通过按菜单键或点击事件触发,另一种是上下文菜单ContextMenu,通过长按事件触发。页面的布局文件放在res/layout目录下,菜单的布局文件存放在res/menu目录下。

1.选项菜单OptionMenu

弹出选项菜单的途径有3种:

(1)按菜单键

(2)在代码中手动打开选项菜单,即调用openOptionsMenu方法

(3)按工具栏右侧的溢出菜单按钮

实现选项菜单的功能需要重写以下两种方法:

onCreateOptionsMenu:在页面打开时调用,需要指定菜单列表的XML文件

onOptionsItemSelected:在列表的菜单项被选中时调用,需要对不同的菜单项做分支处理

菜单布局文件的代码样例:

<menu xmlns:android=http://schemas.android.com/apk/res/android>

         <item

                   android:id=”@+id/menu_change_time”

                   android:orderInCategory=”1”

                   android:title=”改变时间”/>

   <item

                   android:id=”@+id/menu_change_color”

                   android:orderInCategory=”8”

                   android:title=”改变颜色”/>

  <item

                   android:id=”@+id/menu_change_bg”

                   android:orderInCategory=”9”

                   android:title=”改变背景”/>

</menu>

接下来是使用选项菜单的代码片段:

@Override

public Boolean onCreateOptionsMenu(Menu menu){

         getMenuInflater().inflate(R.menu.menu_option, menu);

         return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

         int id = item.getItemId();

         if(id == R.id.……)……

else if…… ……

return true;

}

2.上下文菜单ContextMenu

弹出上下文菜单的途径有两种:

(1)默认在某个控件被长按时弹出,通常在onStart函数中加入registerForContextMenu方法为指定控件注册上下文菜单,在onStop函数中加入unregisterForContextMenu方法为指定控件注销上下文菜单。

(2)在除长按事件之外的其他事件中打开上下文菜单,先执行registerForContextMenu方法注册菜单,然后执行openContextMenu方法打开菜单,最后执行unregisterForContextMenu方法注销菜单

实现上下文菜单的功能需要重写以下两种方法:

onCreateContextMenu:在此指定菜单列表的XML文件,作为上下文菜单列表项的来源

onContextItemSelected:在此对不同的菜单项做分支处理

上下文菜单的布局文件格式同选项菜单,下面是使用上下文菜单的代码片段:
@Override
public void onClick(View v) {
   if (v.getId() == R.id.btn_context) {
       registerForContextMenu(v);
       openContextMenu(v);
       unregisterForContextMenu(v);
   }
}
@Override
protected void onResume() {
   registerForContextMenu(tv_context);
   super.onResume();
}
@Override
protected void onPause() {
   unregisterForContextMenu(tv_context);
   super.onPause();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
   getMenuInflater().inflate(R.menu.menu_option, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
   int id = item.getItemId();
   if (id == ……)

   else if(id == ……)

return true;
}

原文地址:https://www.cnblogs.com/Briddle-ch/p/8479658.html