前言:
在手机app中,有时候我们需要设置大量的菜单选项,如果直接在UI中显示出来会占用原本就不大的屏幕空间,导致app可用于显示信息的空间减少,降低了用户体验。这时,就需要用到menu控件了。menu控件用于显示应用程序的自定义菜单选项,一般位于app顶栏的右上角,在用户不需要使用到菜单选项的时候menu处于关闭状态,只会占用一个图标的空间,极大地提高了屏幕利用率和用户体验。
步骤:
下面我来讲解一下如何创建应用程序的menu。
1、在res目录下新建一个文件夹,命名为menu
2、右键menu文件夹 - > New - > Menu resource file ,命名为main,点击确定后会生成main.xml文件。
3、在main.xml文件中编写代码:
<item>标签是用来创建菜单项的
4、然后回到Activity,并重写onCreateOptionsMenu()方法(重写方法快捷键:Ctrl + O)
并在该方法中编写如下代码:
onCreateOptionsMenu()方法用于创建Menu:
该方法在Activity创建的时候执行,一般只运行一次。getMenuInflater()方法获取MenuInflater对象,再调用他的inflate()方法来创建Menu。inflate方法需要接收两个参数,第一个参数是让我们指定它使用哪个资源文件进行menu的创建,这里我们指定上面创建的main.xml文件,第二个参数则用于指定我们的菜单项将添加到哪个menu对象中,这里直接使用传进来的menu对象。最后该方法的返回值表示是否允许该菜单显示出来,返回true则为显示菜单。
5、目前还只是将菜单显示了出来,这时候点击菜单项是没有反应的,所以我们还需要在Activity中定义菜单响应事件:在Activity中重写onOptionsItemSelected()方法。设置为点击菜单项后会弹出Toast。
onOptionsItemSelected()方法用于设置点击各个菜单项对应Activity做出什么操作。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_item:
Toast.makeText(this, "You Click Add!", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this, "You Click Remove!", Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
大功告成!
下面看下效果
相关知识:
<item>标签常见属性:
android:id:菜单项的唯一标识
android:title:菜单中菜单项的标题
android:icon:菜单项的图标
android:showAsAction:指定菜单项的显示方式。常用的有always、ifRoom、withText和never。多个属性值可以同时使用,但是需要中间用|隔开。
属性值 | 作用 |
always | 菜单项一直显示在ActionBar上,而不会被收纳到overflow菜单 |
ifRoom | 如果ActionBar上空间足够的话会显示在上面,否则会被收纳到overflow菜单 |
withText | 该菜单项的图标和标题会一起显示出来 |
never | 菜单项只会显示在overflow菜单中 |