学了较长时间的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 Menu的基础工作原理和API,结合源码分析,将有助于解决这些问题。同时,利用现有的工具和资源可以提高开发效率,确保自定义Menu既美观又实用。
在Android应用开发中,`Menu`是用户界面中不可或缺的一部分,它通常用于在特定操作(如选项、更多操作)上为用户提供快捷访问的途径。在Android系统中,`Menu`通常出现在活动(Activity)的顶部作为选项菜单,或者在...
通过深入理解Menu的使用和API,你可以创建更符合用户习惯、交互性强的Android应用。在`ProMenu`这个示例代码中,你将找到更多关于菜单实践的实例,包括如何自定义菜单样式、处理更复杂的菜单事件等。通过研究这些...
在这个“Android menu单选菜单.zip”压缩包中,包含了一个简单的Android单选菜单(Radio Menu)的源码示例,非常适合初学者理解和实践。 单选菜单(Radio Menu)在Android中通常由`RadioGroup`和`RadioButton`组成...
总结,`MenuDemo`项目旨在通过实例帮助开发者理解Android Menu的使用,包括如何定义、加载、处理事件以及进行自定义和动态管理。通过这个项目,开发者可以更好地掌握如何在Android应用中提供丰富的交互体验。
在Android应用开发中,Menu是用户界面...总的来说,理解并熟练掌握Android中的Menu机制,能帮助开发者提供更加丰富和直观的用户体验。在实际项目中,可以根据需求灵活运用不同类型的Menu,提升应用的易用性和可操作性。
在Android开发中,UI设计是用户体验的关键组成部分,而Menu作为一种重要的交互元素,常常用于实现应用程序中的下拉选项或操作选项。本教程将深入探讨如何在Android中创建炫酷的弹出菜单,让你的应用脱颖而出。 首先...
本文将深入探讨Android Menu控件的源码,理解其工作原理,以及如何在实践中有效地使用它。 Menu控件在Android系统中扮演着提供应用功能选项的角色,它主要由三部分组成:MenuItem、Menu和MenuInflater。MenuItem是...
在Android应用开发中,Menu是用户界面中...`menu单选菜单.zip`中的资源可能包含示例代码、布局文件和其他帮助开发者理解这一概念的素材。在实际项目中,根据需求灵活运用这些知识,将有助于构建更加出色的Android应用。
在Android应用开发中,Menu是用户界面的重要组成部分,它提供了在屏幕顶部或底部显示一系列操作选项的功能。Android菜单主要用于在不占用屏幕空间的情况下提供多种功能选择。本篇将深入探讨如何在Android中创建和...
在Android应用开发中,Menu是用户界面中的...通过研究源码,你将更好地理解Android菜单的使用和单选菜单的实现方式。这个例子也展示了如何结合XML布局和Java代码来构建交互式用户界面,是提升Android开发技能的好资料。
本项目“Android_Menu.rar”聚焦于Android系统中如何创建和使用简单的菜单功能,适用于初学者理解并掌握这一核心技能。 在Android中,菜单主要用于在特定场景下显示额外的功能选项,比如在活动(Activity)的顶部...
综上所述,创建Android的另类Menu菜单不仅需要理解基本的菜单操作,还需要掌握自定义布局、动画、手势识别和数据绑定等技术。这样的菜单能为用户提供更加个性化和有趣的交互体验,同时也要保证其符合标准的用户界面...
在Android开发中,自定义Menu和TabMenu是提升用户体验、个性化应用界面的重要手段。这篇“Android提高十八篇之自定义Menu(TabMenu)”的主题聚焦于如何在Android应用中创建和定制化自己的菜单栏和标签页功能。下面...
综上所述,理解和掌握`Menu`, `SubMenu`, `MenuItem`的使用是Android应用开发中的基础技能,它们提供了丰富的功能,帮助我们构建用户友好的界面。在`OptionsMenuDemo`项目中,你将看到这些概念如何具体应用到实际的...
本文将深入探讨如何在Android中实现自定义`Menu`,结合源码解析以及工具的使用,帮助你更好地理解这一过程。 首先,`Menu`是Android系统中的一个接口,它用于构建应用程序的上下文操作菜单。通常,我们会在`...
"AndroidMenu控件Demo"是一个专门演示如何在Android应用中使用Menu的实例,其中包含了详细的注释,方便开发者理解和学习。下面将详细介绍Menu控件的基本使用方法以及在Demo中的实现。 1. **Menu的创建**: - Menu...
在Android应用开发中,菜单...理解并熟练运用菜单对于Android开发者来说至关重要,因为良好的用户体验往往离不开直观且易用的菜单设计。通过实践和探索,你可以创造出符合用户需求的菜单,提升应用的交互性和可用性。