`
talin2010
  • 浏览: 498945 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

menu.addIntentOptions 添加动态菜单

阅读更多
原创 menu.addIntentOptions 添加动态菜单 收藏 android的一个activity可以再选中某项之后按menu键弹出特定的菜单,也就是动态菜单。动态菜单的实现是靠menu类中的addIntentOptions函数实现的,具体的声明如下: int android.view.Menu.addIntentOptions( int groupId, int itemId, int order, ComponentName caller, Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) 这个函数是用来动态产生option menu的 函数参数分析: 1. groupid 就是菜单组的编号; 2. itemId (可以让其为0) 3. order 菜单顺序,可以不考虑 4. Caller 就是发起activity的activity 5. Specifics 以action+uri的具体方式来增加激活相应activity的菜单项 6. Intent 以categroy+uri这种一般形式来增加激活相应activity的菜单项 参数Intent和Specifics的区别是,一个用categroy+uri来匹配activity,一个用action+uri来匹配activity。 8. outSpecificItems 这个是返回的MenuItem值,对应以specifics方式匹配的菜单项。 下面以android sdk中notepad的例子来说明其用法。 来看这个例子中的NotesList.java文件中的public boolean onPrepareOptionsMenu(Menu menu)函数,这个函数会在设定普通option menu菜单项的的onCreateOptionsMenu函数之后调用,这个函数的主要部分是如下代码: view plaincopy to clipboardprint? 1. Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId()); 2. 3. 4. Intent[] specifics = new Intent[1]; 5. specifics[0] = new Intent(Intent.ACTION_EDIT, uri); 6. MenuItem[] items = new MenuItem[1]; 7. 8. 9. Intent intent = new Intent(null, uri); 10. intent.addCategory(Intent.CATEGORY_ALTERNATIVE); 11. menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, 12. items); Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId()); Intent[] specifics = new Intent[1]; specifics[0] = new Intent(Intent.ACTION_EDIT, uri); MenuItem[] items = new MenuItem[1]; Intent intent = new Intent(null, uri); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items); 其中ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId())会得到选中项的信息,这个信息将会作用匹配用的intent的 data部分。 specifics[0] = new Intent(Intent.ACTION_EDIT, uri)在这里是这个意思:到androidMenifest.xml中去找activity, 如果有某个activity的<intent- filter>项的action和data与Intent.ACTION_EDIT和相应的uri匹配,就为这个activity添加一个菜单项,菜单项的显示名称从相应activity的 android:label项得来。 Intent intent = new Intent(null, uri); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); 是这个意思:到androidMenifest.xml中去找activity,如果有某些activity的<intent-filter>项的Category和data与 Intent.CATEGORY_ALTERNATIVE和相应的uri匹配,就为这些activity分别添加菜单项,菜单项的显示名称从相应activity的android:label项 得来。 下面可以做个试验,在AndroidMenifest.xml中新建一个activity MyAdd view plaincopy to clipboardprint? 1. <activity android:name="MyAdd" android:label="@string/title_myadd" android:windowsoftinputmode="stateVisible"> 3. <intent-filter android:label="@string/resolve_myadd"> 4. <action android:name="com.android.notepad.action.MYADD"></action> 5. <category android:name="android.intent.category.ALTERNATIVE"></category> 6. <data android:mimetype="vnd.android.cursor.item/vnd.google.note"></data> 7. </intent-filter> 8. </activity><activity android:name="MyAdd" android:label="@string/title_myadd" android:windowsoftinputmode="stateVisible"><intent-filter android:label="@string/resolve_myadd"><action android:name="com.android.notepad.action.MYADD"></action><category android:name="android.intent.category.ALTERNATIVE"></category><data android:mimetype="vnd.android.cursor.item/vnd.google.note"></data></intent-filter></activity> 写好该activity的layout和实现后,选中noteslist中的一项后,点menu可以看到菜单中多出了一项,点击可以切换到该activity。 这是以函数中Intent匹配的菜单项,当然也可以用Specifics来匹配。下面示例: 删除掉MyAdd这个activity中的 <category android:name="android.intent.category.ALTERNATIVE"></category>,这时该activity已经与Intent不匹配了, 再将onPrepareOptionsMenu函数中的代码改成如下: view plaincopy to clipboardprint? 1. Intent[] specifics = new Intent[2]; 2. specifics[0] = new Intent(Intent.ACTION_VIEW, uri); 3. specifics[1] = new Intent("com.android.notepad.action.MYADD",uri); 4. MenuItem[] items = new MenuItem[2]; Intent[] specifics = new Intent[2]; specifics[0] = new Intent(Intent.ACTION_VIEW, uri); specifics[1] = new Intent("com.android.notepad.action.MYADD",uri); MenuItem[] items = new MenuItem[2]; 选中一项点菜会发现,动态菜单又回来了,不过这次是用Specific来匹配的。</intent-filter></intent->
分享到:
评论

相关推荐

    简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习

    简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习 简历是展示个人经历、技能和能力的重要文档,以下是一个常见的简历格式和内容模板,供您参考: 简历格式: 头部信息:包括姓名、联系方式(电话号码、电子邮件等)、地址等个人基本信息。 求职目标(可选):简短描述您的求职意向和目标。 教育背景:列出您的教育经历,包括学校名称、所学专业、就读时间等。 工作经验:按时间顺序列出您的工作经历,包括公司名称、职位、工作时间、工作职责和成就等。 技能和能力:列出您的专业技能、语言能力、计算机技能等与职位相关的能力。 实习经验/项目经验(可选):如果您有相关实习或项目经验,可以列出相关信息。 获奖和荣誉(可选):列出您在学术、工作或其他领域获得的奖项和荣誉。 自我评价(可选):简要描述您的个人特点、能力和职业目标。 兴趣爱好(可选):列出您的兴趣爱好,展示您的多样性和个人素质。 参考人(可选):如果您有可提供推荐的人员,可以在简历中提供其联系信息。 简历内容模板: 姓名: 联系方式: 地址: 求职目标: (简短描述您的求职意

    asp代码asp.net电子书城系统设计与实现(源代码+论文)

    asp代码asp.net电子书城系统设计与实现(源代码+论文)本资源系百度网盘分享地址

    JW5116F 产品规格书pdf

    JW5116F ESOP-8 40V/3A异步降压转换器

    tick need to pass

    tick

    FAT32文件系统的数据隐写

    源代码

    YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip

    YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip个人97分的期末大作业,主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip个人97分的期末大作业,主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip个人97分的期末大作业,主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip个人97分的期末大作业,主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含

    pypy2.7-v7.3.0rc2-aarch64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    超微 X11DPU-XLL主板用户手册

    超微 X11DPU-XLL主板用户手册

    android studio下载

    android studio下载

    x酒高端品鉴会策划案ss.pptx

    x酒高端品鉴会策划案ss.pptx

    pypy3.10-v7.3.12rc1-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pypy2.7-v7.3.10-linux32.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    头歌python循环结构答案.txt

    头歌python循环结构答案.txt

    杰理AC1279A 规格书

    杰理AC1042B 规格书

    案例-制造业_管理信息化项目_IT规划报告dr.ppt

    案例-制造业_管理信息化项目_IT规划报告dr.ppt

    pypy3.6-v7.1.1-linux32.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pypy3.7-v7.3.5-src.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    OrCAD Capture 小工具:放置网络线阵列

    OrCAD Capture 小工具,可以提升设计效率

    基于PHP高校网上教材征订系统的设计与实现(论文+源码)-kaic.docx

    摘 要 ABSTRACT 目 录 第1章 绪论 1.1开发背景 1.2开发意义 1.3研究内容 第2章 主要技术和工具介绍 2.1 php语言 2.2 MySQL 数据库 2.3 php技术 2.4PHP简介 第3章 系统分析 3.1可行性分析 3.1.1经济可行性 3.1.2技术可行性 3.1.3操作可行性 3.2需求分析 3.3业务流程分析 3.4数据流程分析 第4章 系统设计 4.1系统结构设计 4.2功能模块设计 4.3数据库设计 4.3.1数据库设计概述 4.3.1概念设计 4.3.2表设计 第5章 系统实现 5.1基本任务 5.2登录模块的实现 5.2.1登录实现 5.2.2管理员后台登录 5.3用户模块的实现 5.3.1添加模块及登录的实现 5.2.2留言模块的实现 5.2.3征订模块的实现 5.4管理员模块的实现 5.4.1系统用户管理模块的实现 5.4.2教材信息管理模块的实现 5.4.3公告信息管理模块的实现 第6章 系统测试 6.1测试目的 6.2测试概述 6.3单元测试 6.3.1添加测试 6.3.2登录测试 6.4集成测试 第7章 总结 致 谢

Global site tag (gtag.js) - Google Analytics