文档章节

你不知道的安卓菜单机制

Dougien
 Dougien
发布于 2016/02/16 17:26
字数 838
阅读 13
收藏 0

总的来说 Android一共有3种形式的菜单:

        1.选项菜单(optionsMenu)

      2.上下文菜单(ContextMenu)

      3.子菜单(subMenu)

其中最常见的就是选项菜单(optionsMenu),该菜单在点击 menu按键后会在对应的Activity底部显示出来。

Activity菜单机制(与dialog类似)

1.public boolean onCreateOptionsMenu(Menu menu)

        用于初始化菜单,其中menu参数就好似即将要显示的Menu对象。

          返回true则显示该menu,false则不显示

        (只会在第一次初始化菜单时调用)

2.public boolean onPrepareOptionsMenu(Menu menu)

        在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。

    同样,返回true则显示该menu,false则不显示;

    (可以通过此方法活动的改变菜单的状态,比如加载不通的菜单等等)

3.public void onOptionsMenuClosed(Menu menu)

        每次菜单被关闭时调用。

    (菜单被关闭有3中情形,menu按钮被再次点击,back按钮被电击或者用户选择了某一个菜单项)

4.public boolean onOptionsItemSelected(MenuItem item)

    菜单项被点击时调用,也就是菜单项的监听方法。


   通过这几个方法,可以得知,对于Activity,同一时间只能显示和监听一个Menu对象。


2.添加菜单

    可以在onCreateOptionsMenu或者onPrepareOptionMenu方法中来添加菜单

    2.1代码添加

    menu.add((int groupId,int itemId,int order,

 title).setIcon(drawable ID)

    add()方法的4个参数,依次是:

        1.组别,如果不分组的话就写 Menu.None,

        2.Id, 这个很重要,Android根据这个Id来确定不同的菜单

        3.顺序,哪个菜单项在前面由这个参数的大小决定

        4.文本,菜单项的显示文本

  add()方法返回的是MenuItem对象,调用其setIcon()方法,为相应MenuItem设置Icon


示例;

public boolean onCreateOptionsMenu(Menu menu){

super.onCreateOptionsMenu(menu);

menu.add(Menu.NONE,Menu.First+1,0"设置").setIcon(R.drawable.setting);

return true;

}


2.2布局文件添加:

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

调用Activity的getMenuInflater()得到一个MenuInflater,

使用inflate方法把布局文件中的定义的菜单 加载给 第二个参数所对应的menu对象

示例

@Overrride

    public boolean onCreateOptionsMenu(Menu menu){

        super.onCreateOptionsMenu(menu);

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

        return true;

}

布局文件,res目录下建一个menu文件夹, 并创建布局wenjian:options_menu.xml

<?xml version = "1.0" encoding="utf-8"?>

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

<item android:id= "@+id/menu_setting"android:title="设置"android:icon ="@drawable/setting"></item>

</menu>


菜单项监听:只要菜单中的额菜单项被点击,都会触发onOptionsItemSelected(MenuItem item)

item参数即为被点击的菜单项,哪个需要在此方法内判断哪个Item被点击来,从而实现不同的操作

对于两种不同的添加菜单方法,判断的方法有一点区别,但本质一样


代码 添加的判定方法

@Override 

    public boolean onOptionsItemSelected(MenuItem item){

        super.onOptionsItemSelected(item);

        switch(item.getItemId()) //得到被点击的item的itemId

        {

            case Menu.First+1:   //对应的ID就是在add()方法中所设定的id

                break;

            case Menu.First+2:   //对应的ID就是在add()方法中所设定的id

                break;

            }

        retuen true;

}


布局文件添加菜单的判定方法

@Override

    public boolean onOptionsItemSelected(MenuItem item){

        super.onOptionsItemSelected(item);

           switch(item.getItemId()); //得到被点击的item的itemId

            {

            case R.id.menu_setting:  //这里的id就是布局文件中定义的id,在用R.id.xxx方法中获取出来

            break;

            case R.id.menu_info:

            break;

        }

        return true;

]

© 著作权归作者所有

Dougien
粉丝 4
博文 29
码字总数 17891
作品 0
长沙
程序员
私信 提问
Android 进程停止的问题

各位好,不知道你们手机上有没有这样的android应用:为service开辟了一个新进程,其他的组件都在app的默认进程中。这样用手机setting菜单中的应用程序管理,可以看到 service进程是运行的,主...

war22moon
2015/01/21
94
0
Android的onCreateOptionsMenu()创建菜单Menu详解

Android一共有三种形式的菜单: 1.选项菜单(optinosMenu) 2.上下文菜单(ContextMenu) 3.子菜单(subMenu) 其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的A...

娶到笨笨
2014/03/12
0
0
android.support.v4.widget.DrawerLayout 抽屉效果导航菜单

抽屉效果导航菜单图示 如图所示,抽屉效果的导航菜单不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面左上角的一个按钮点击,菜单就滑出来,而且感觉能放很多东西 概况:实现上图...

刘小米_思聪
2014/12/03
0
0
【压岁干货】精彩技术博客+优秀源码集锦

虽然2015年已经过了一月有余,但在中国,好像只有过了春节才算进入新的一年。眼看着这也春节倒计时了,大家好像又都忙了起来,赶项目赶项目…… 从DevStore整理了一些优秀的技术博客和源码作...

牵着蜗牛去西藏
2015/02/04
1K
4
activity管理

@红薯 你好,想跟你请教个问题: 最近在做一个新闻客户端的应用 大概是这么个问题 一个启动界面 是程序的主入口界面 就是action.main,用了handler.PostDelayed()进入到登录界面 然后是登陆界...

Jux-L
2014/04/20
298
5

没有更多内容

加载失败,请刷新页面

加载更多

0.01-Win10安装linux子系统

一、安装Debian子系统 -1、控制面板设置: -1.1、打开“控制面板” —— “程序” —— “启用或关闭Windows功能” —— 勾选 “适用于Linux的Windows子系统” -2、设置: -2.1、打开“设置”...

静以修身2025
昨天
0
0
init 0-6 (启动级别:init 0,1,2,3,4,5,6)

启动级别: init 0,1,2,3,4,5,6 这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。 0: 停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system...

圣洁之子
昨天
2
0
Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

天王盖地虎626
昨天
2
0
聊聊Elasticsearch的ProcessProbe

序 本文主要研究一下Elasticsearch的ProcessProbe ProcessProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java public class ProcessProb......

go4it
昨天
2
0
mysql PL(procedure language)流程控制语句

在MySQL中,常见的过程式SQL语句可以用在存储体中。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句,它们可以进行流程控制。 IF语句相当于Java中的if()...else if(...

edison_kwok
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部