`
xwangly
  • 浏览: 130725 次
  • 性别: Icon_minigender_1
  • 来自: 鄂州
社区版块
存档分类
最新评论

转:android Menu理解

阅读更多
学了较长时间的android. 有些东西都习以为常,不愿意去深究了.但是没深入理解并不代表它平凡,我记的刚接触android时候,书上就教我如何写Menu.  什么重载onCreateOptionsMenu等等.然后就按部对menu操作,哎.这个东西就出来了.

但是这些常用的功能都包含这较大的奥妙,说实话,这些常见的东西未必每个人都会,即使会写也未必知道他的来龙去脉,我的个性还是要深究,要深刻理解为什么这样.这样才能定植android,修改完善android.

那来吧,看我分析Menu

按下Menu键,是Menu键触发了这个功能,那我们得看看系统如何捕捉了这个Menu事件.如果你对android 事件传递机智不很清楚, 可以找我,我在公司讲课时候已经说的很清楚.如果从eventHub->windowMnaagerService->? 等.


这里不说消息传递,时间捕捉是在PhoneWIndow.java里的onKeyDOwnPanel函数,从这个函数捕捉到Menu后走会创建PanelFeatureState ,该类记录了当前Menu的状态信息,已经Menu的对象引用等.


然后进入了prepareMenu ,final Callback cb = getCallback();

        if (cb != null) {
            st.createdPanelView = cb.onCreatePanelView(st.featureId);
        }
还是通过callback与activity来交互,此时我们发现onCreatePanelV iew返回了null.

if (st.createdPanelView == null) {
            // Init the panel state's menu--return false if init failed
            if (st.menu == null) {
                if (!initializePanelMenu(st) || (st.menu == null)) {
                    return false;
                }

这就很清楚了.如果用户没顶职view. 这系统默认是要显示Menu.   如何显示Menu呢?

final MenuBuilder menu = new MenuBuilder(getContext());

        menu.setCallback(this);
        st.setMenu(menu);
这个这就是以后我们需要add的那个Menu.

然后进入了onCreatePanelMenu这个东西是Activity.java 里的东西,看看他做了什么动作

onCreateOptionsMenu  哎.这才到了我们重载的这个东西.

前面这些相当与初始化,那什么时候真正显示Menu呢?

以为以前是onKeyDownpanle 是在用户按下Menu键的动作,但是你可以测试下,真诚出来的时候在在弹器的时候,
menu弹起做什么动作呢?

主要是显示了. // Show menu
                openPanel(st, event);

关键是看openPanel 实现

st.decorView.addView(st.shownPanelView, lp);这句是把menu的内容加到panel里.

然后
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
                WRAP_CONTENT, WRAP_CONTENT,
                st.x, st.y, WindowManager.LayoutParams.TYPE_APPLICATION_PANEL,
                WindowManager.LayoutParams.FLAG_DITHER
                | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                st.decorView.mDefaultOpacity);

        lp.gravity = st.gravity;
        lp.windowAnimations = st.windowAnimations;
       
        wm.addView(st.decorView, lp);

通过windowMnaager把panel加到屏幕上.

恩,这样这个Menu就出来了,写blog不可能把每句代码都些出来,些这个估计大家都看的很清楚了.

http://www.wscxy.com/nuaa/article.asp?id=121
分享到:
评论

相关推荐

    学习理解Android菜单Menu操作

    理解Android的菜单 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个”Menu”键,由此可见菜单在Android程序中的特殊性。Android SDK提供的菜单有如下几种: 选项...

    Android实例代码

    第4章、深入理解Activity 4.1、建立、配置和使用Activity: 4.2、Activity的回调机制: 4.3、Activity的生命周期: 第5章、使用Intent和IntentFilter进行通信 5.1、Intent对象详解: 5.2、Intent的属性及intent...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    第4章、深入理解Activity 4.1、建立、配置和使用Activity: 4.2、Activity的回调机制: 4.3、Activity的生命周期: 第5章、使用Intent和IntentFilter进行通信 5.1、Intent对象详解: 5.2、Intent的属性及intent...

    Android编程入门很简单.(清华出版.王勇).part1

    8.1深入理解Activity 8.1.1使用Intent连接Activity 8.1.2 Activity的生命周期 …… 第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人...

    筛选菜单库DropDownMenu­_.zip

     }使用教程添加DropDownMenu 到你的布局文件,如下<com android:id="@ id/dropDownMenu" android:layout_width="match_parent" android:layout_height="match_parent" app:ddmenuTextSize="13sp" app:...

    android 自定义控件(底部icon点击效果)

    (考虑到新手可能不易理解,笔者代码没有多加功能) 把底部icon做成自定义控件的优势: 1、搭配fragment或者viewpager使用的时候更加方便,避免写过多重复性代码。 2、代码维护起来更加方便,比如要修改底部icon中的...

    Android菜单操作之创建并响应菜单

    上一篇《学习理解Android菜单Menu操作》简单介绍了一下Android的菜单,今天让我们看一下如何通过代码创建和响应最常用的选项菜单(options menu)。 一、创建options menu 之前提到,Android的activity已经为我们...

    Android编程入门很简单.(清华出版.王勇).part2

    8.1深入理解Activity 8.1.1使用Intent连接Activity 8.1.2 Activity的生命周期 …… 第9章Android中的数据存储 第10章绚丽的多媒体技术 第11章Android网上冲浪 第12章Android地图服务 第4篇项目案例开发 第13章联系人...

    《Google Android开发入门与实战》.pdf

    本书注重对实际动手能力的指导,在遵循技术研发知识体系的严密性同时,在容易产生错误、不易理解的环节配以了翔实的开发情景截图,并将重要的知识点和开发技巧以“小实验”、“小提醒”、“小知识”、“注意”等的...

    疯狂Android讲义源码

     6.7 使用菜单(Menu)资源 239  6.7.1 定义菜单资源 239  6.7.2 使用菜单资源 240  6.8 样式(Style)和主题(Theme)  资源 243  6.8.1 样式资源 243  6.8.2 主题资源 245  6.9 属性(Attribute)资源 247...

    Android实训实习报告总结.docx

    2.3、Menu MenuDrawer Android实训实习报告总结全文共13页,当前为第3页。Android实训实习报告总结全文共13页,当前为第3页。滑出式菜单,通过拖动屏幕边缘滑出菜单,支持屏幕上下左右划出,支持当前View处于上下层...

    [Android开发权威指南].李宁.扫描版.pdf

     《Android开发权威指南》注重对实际动手能力的指导 在遵循技术研发知识体系严密性的同时 在容易产生错误 不易理解的环节上配备了翔实的开发情景截图;并将重要的知识点和开发技巧以“多学一招” “扩展学习” ...

    Google.Android开发入门与实战

    《Android开发入门与实战》注重对实际动手能力的指导,在遵循技术研发知识体系的严密性同时,在容易产生错误、不易理解的环节配以了翔实的开发情景截图,并将重要的知识点和开发技巧以“小实验”、“小提醒”、“小...

    疯狂Android讲义.part2

    6.7 使用菜单(Menu)资源 239 6.7.1 定义菜单资源 239 6.7.2 使用菜单资源 240 6.8 样式(Style)和主题(Theme) 资源 243 6.8.1 样式资源 243 6.8.2 主题资源 245 6.9 属性(Attribute)资源 247 6.10 使用原始...

    疯狂Android讲义.part1

    6.7 使用菜单(Menu)资源 239 6.7.1 定义菜单资源 239 6.7.2 使用菜单资源 240 6.8 样式(Style)和主题(Theme) 资源 243 6.8.1 样式资源 243 6.8.2 主题资源 245 6.9 属性(Attribute)资源 247 6.10 使用原始...

    xmljava系统源码-AppBar:通过继承ToolBar来制作的可灵活定制样式的原生AppBar,摆脱自定义的ActionBar

    更改原生ActionBar样式需要定义各种style,这些style真的太难理解了(我花了三天才理解)。ActionBar内部的view还都是不能直接拿到的,很不灵活。 我不希望自己写一个导航栏,我希望利用原生控件来满足丰富的定制...

Global site tag (gtag.js) - Google Analytics