Android OptionMenu 选项菜单
接下来几章节我们来学习 Android 中的 menu
(菜单)
Menu
Android 中的 Menu
(菜单) 有以下几种
-
OptionMenu :选项菜单,通过
Menu
键来调用 (现在手机一般都没目录键了) -
SubMenu :子菜单,点击子菜单将弹出一个显示子菜单项的悬浮框, 子菜单不支持嵌套,即不能包括其它子菜单
-
ContextMenu :上下文菜单,通过长按某个 UI 组件后出现的菜单,该组件需注册上下文菜单
本章节我们就先来学习下 OptionMenu 选项菜单
OptionMenu ( 选项菜单 )
OptionMenu 在 Android 3.0+ 是通过 ActionBar
中的 setting
菜单
在 Android 5.0+ 的版本中则是在 ToolBar 中,点击后弹出出一个溢出式的菜单样
创建 OptionMenu
Android 没有提供 XML 形式的 OptionMenu 创建方法,也没有提供实例化一个类的创建方法,而是通过重写 Activity
中的几个方法来创建
Activity
提供了以下几个方法用于创建 OptionMenu 和与之交互
方法 | 说明 |
---|---|
boolean onCreateOptionsMenu(Menu menu) | 调用 OptionMenu,完成菜单初始化 |
boolean onOptionsItemSelected(MenuItem item) | 菜单项被选中时触发,完成事件处理 |
void onOptionsMenuClosed(Menu menu) | 选项菜单关闭会调用该方法 |
boolean onPrepareOptionsMenu(Menu menu) | 选项菜单显示前会调用该方法,可在这里进行菜单的调整(动态加载菜单列表) |
boolean onMenuOpened(int featureId, Menu menu) | 选项菜单打开以后会调用这个方法 |
而创建菜单项的方式有两种
-
直接通过编写菜单 XML 文件,然后调用下面的方法加载菜单
getMenuInflater().inflate(R.menu.menu_main, menu);
-
通过代码动态添加,
onCreateOptionsMenu(menu)
中的参数menu
,调用add()
方法添加菜单add(int groupId, int itemId, int order, CharSequence title)
范例
下面我们就一步一步来创建一个 OptionMenu
吧,先放一下最后的效果图
-
创建一个 空的 Android 项目
cn.twle.android.OptionMenu
-
在
res
目录下新建一个资源目录menu
,然后在res/menu
目录下新建文件main_optionmenu.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/create" android:title="新建" /> <item android:id="@+id/edit" android:title="编辑" /> <item android:id="@+id/save" android:title="保存" /> <item android:id="@+id/save_as" android:title="另存为..." /> <item android:id="@+id/help" android:title="帮助" /> </menu>
-
直接修改 MainActivity.java
package cn.twle.android.optionmenu; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends AppCompatActivity { // 1. 定义菜单项的标识 final private int OPEN = 111; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // 加载 XML 菜单目录 getMenuInflater().inflate(R.menu.main_optionmenu, menu); menu.add(1,OPEN,0,"打开"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // 菜单项被选中时触发 int id = item.getItemId(); String label = ""; Log.d("OptionMenu",String.valueOf(id)); switch (id){ case R.id.create: label = "新建"; break; case OPEN: label = "打开"; break; case R.id.help: label = "帮助"; break; } Toast.makeText(getApplicationContext(),"你点击了:" + label,Toast.LENGTH_SHORT).show(); return super.onOptionsItemSelected(item); } }