android中的显示跳转和隐式跳转
来源:互联网 发布:ubuntu wine 卸载软件 编辑:程序博客网 时间:2024/05/29 19:33
简介
android提供了三种菜单类型,分别为options menu,context menu,sub menu。
options menu就是通过按home键来显示,context menu需要在view上按上2s后显示。这两种menu都有可以加入子菜单,子菜单不能种不能嵌套子菜单。options menu最多只能在屏幕最下面显示6个菜单选项,称为iconmenu,icon menu不能有checkable选项。多于6的菜单项会以more icon menu来调出,称为expanded menu。options menu通过activity的onCreateOptionsMenu来生成,这个函数只会在menu第一次生成时调用。任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。onOptionsItemSelected 用来处理选中的菜单项。
context menu是跟某个具体的view绑定在一起,在activity种用registerForContextMenu来为某个view注册context menu。context menu在显示前都会调用onCreateContextMenu来生成menu。onContextItemSelected用来处理选中的菜单项。
android还提供了对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组,这样就可以通过调用setGroupCheckable,setGroupEnabled,setGroupVisible来设置菜单属性,而无须单独设置。
Options Menu
Notepad中使用了options menu和context menu两种菜单。首先来看生成options menu的onCreateOptionsMenu函数。
这是一个标准的插入一个菜单项的方法,菜单项的id为MENU_ITEM_INSERT。有意思的是下面这几句代码:
这到底有何用处呢?其实这是一种动态菜单技术(也有点像插件机制),若某一个activity,其类型是”android.intent.category.ALTERNATIVE”,数据是”vnd.android.cursor.dir/vnd.google.note”的话,系统就会为这个activity增加一个菜单项。在androidmanfest.xml中查看后发现,没有一个activity符合条件,所以这段代码并没有动态添加出任何一个菜单项。
为了验证上述分析,我们可以来做一个实验,在androidmanfest.xml中进行修改,看是否会动态生成出菜单项。
实验一
}
它所对应的布局界面XML文件如下:
<LinearLayout
<TextView
<Button
</LinearLayout>
然后修改androidmanfest.xml,加入下面这段配置,让HelloAndroid满足上述两个条件:
好了,运行下试试,哎,还是没有动态菜单项加入呀!怎么回事呢?查看代码后发现,原来是onPrepareOptionsMenu搞的鬼!这个函数在onCreateOptionsMenu之后运行,下面这段代码中,由于Menu.CATEGORY_ALTERNATIVE是指向同一个组,所以把onCreateOptionsMenu中设置的菜单项给覆盖掉了,而由于onPrepareOptionsMenu没有给Menu.CATEGORY_ALTERNATIVE附新值,故Menu.CATEGORY_ALTERNATIVE还是为空。
好的,那我们暂时把上面这几句给注释掉,当然,也可以不注释这几句,在onCreateOptionsMenu中改groupid号,即将Menu.CATEGORY_ALTERNATIVE改为Menu.first,其他的也行,但注意不要改为menu.none,这样会覆盖掉。
添加的菜单。因为menu.none也为0。运行后就可以看到动态菜单出来了!
上面这个options menu是在NotesList界面上没有日志列表选中的情况下生成的,若先选中一个日志,然后再点”menu”,则生成的options menu是下面这样的:
哎,又动态增加了两个菜单项”Edit note”和”Edit title”,这又是如何动态加入的呢?这就是onPrepareOptionsMenu的功劳了。
首先获取选中的日志(若没有选择,则uri为空)
然后为选中的日志创建一个intent,操作类型为Intent.ACTION_EDIT,数据为选中日志的URI.于是会为选中的日志创建一个”Edit note”菜单项。
这几句和上面onCreateOptionsMenu函数中类似,用于动态增加菜单项,若某一个activity,其类型是”android.intent.category.ALTERNATIVE”,数据是”vnd.android.cursor.item/vnd.google.note”的话,系统就会为这个activity增加一个菜单项。在androidmanfest.xml中查看后发现,TitleEditor这个activity符合条件,于是系统就为TitleEditor这个activity动态添加一个菜单项”Edit title”。
若日志列表为空,则从菜单中删除组号为Menu.CATEGORY_ALTERNATIVE的菜单项,只剩下”Add note”菜单项。
处理“选中菜单项”事件
菜单项选中事件的处理非常简单,通过onOptionsItemSelected来完成,这里只是简单地调用
Context Menu
下面介绍另一种菜单---上下文菜单,这通过重载onCreateContextMenu函数实现。首先确认已经选中了日志列表中的一个日志,若没选择,则直接返回。Cursor指向选中的日志项。
}
对于日志的删除,首先调用ContentUris.withAppendedId(getIntent().getData(), info.id);来拼接出待删除日志的URI.然后getContentResolver().delete(noteUri, null, null);调用下层的Content Provider去删除此日志。
实验二
来做个简单实验,在上述代码基础上增加一个上下文菜单项。首先在onCreateContextMenu函数中增加一个上下文菜单项:
- android中的显示跳转和隐式跳转
- 显示和隐式跳转
- Android-Activity之间显示和隐式跳转-Date 数据跳转-调用系统的的组件
- android intent 隐式意图和显示意图(activity跳转)
- android intent 隐式意图和显示意图(activity跳转)
- Android Activity的跳转:普通跳转(显式跳转,隐式跳转)和传值跳转
- android--显式跳转和隐式跳转
- android--显式跳转和隐式跳转
- (转)android--显式跳转和隐式跳转
- 跳转activity的几种方式 | 显示和隐式跳转 | 外部跳转时遇到权限错误
- android学习笔记 是用显示和隐式的Intent 跳转界面
- android中的url跳转
- 显示和隐式的Intent 跳转界面
- 【Android】Intent显式跳转和隐式跳转, 及多个Activity之间传值
- android--显式跳转和隐式跳转的区别用法
- android Activity隐式跳转
- 31.显示隐式跳转activity
- Activity详解 Intent显式跳转和隐式跳转
- SSH登录到服务器通过D-BUS调用应用API问题
- 关于大数据的处理的一些经验
- 串口半双工与全双工
- Aix存储结构
- 售货员
- android中的显示跳转和隐式跳转
- 一排石头的游戏问题
- linux中fork()函数详解
- 将整数拆分为勾股数的问题解决
- matlab 二维高斯分布
- checkStyle 代码有警告怎么办
- ubifs 文件系统-1: overview
- Sencha Touch 2 Map
- codeigniter 实例