Android中的Menu的简介(翻译自官方文档)——————个人笔记
来源:互联网 发布:手机会议纪要软件 编辑:程序博客网 时间:2024/05/21 09:45
菜单分为三种:
Option Menu 11之后使用ActionBar来代替
Context Menu
Popup Menu
1、使用xml来定义一个Menu
好处:
在xml中菜单的结构更加清晰
把应用的行为跟菜单的内容分离
能让开发者适配不同的屏幕尺寸
eg:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game"
android:showAsAction="ifRoom"/>
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help" />
</menu>
其中showAsAction ifRoom indicate "Only place this item in the Action Bar if there is room for it."
在菜单项同时指定icon和title属性的时候,默认只是显示icon,这是想要显示两者,可以在showAsAction中添加:withText.
同时,可以使用always来时菜单项常驻,但是窄屏手机就会有问题,造成布局混乱
2、创建一个OptionMenu
在2.3以前的版本中,菜单键会调出optionMenu,默认为六个菜单,多余的会在more中出现
在3.0以后的版本中,optionMenu可以使用ActionBar来实现,默认是在OverFlow中
步骤:
a.初始化菜单选项,在要实现的activity或者fragment中重写onOptionMenuCreate()方法,在方法中去inflate菜单
eg:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
b.为菜单添加选中事件处理。
当选中菜单的时候,系统会调用Activity的onOptionsItemSelected()方法,在这个方法中会传入被选中的item(MenuItem)
通过getItemId()方法,可以获取选中菜单的id
当成功处理一个菜单事件之后,需要返回true,默认返回false
如果在Activity中包含Fragment,则先调用Activity中的onOptionsItemSelected()方法,
在去调用fragment中的onOptionsItemSelected()方法,按照添加的顺序,如果返回true之后则不会往下调用
c.动态修改菜单
在 onPrepareOptionsMenu()中会传入一个Menu对象,通过这个对象可以进行对menu进行改变
在2.3之前的系统中,每一次调用optionmenu的时候onPrepareOptionsMenu()这个方法都会调用一次。
在3.0以后的系统中,必须调用invalidateOptionMenu()才会调用这个方法。
3、创建一个ContextMenu
常用于像listView或者GridView这样的视图组中。
两种方式来实现:
1.floating context menu 一种漂浮的menu
2.contextual action mode 这种是在3.0之后的版本
a.创建一个floating context menu
1.要添加的视图先注册一下,调用registerForContextMenu方法来注册
2.重写onCreateContextMenu方法初始化菜单,eg:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
3.重写onContextItemSelected方法,处理选中菜单项事件处理
eg:
@Override
public boolean onContextItemSelected(MenuItem item) {
int itemid = item.getItemId();
if(R.id.item_one==itemid){
Toast.makeText(this, "选中了选项一", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
ps:当不进行处理的时候调用父类的方法,或者处理成功的时候返回true
4.使用contextual action mode
a.为某一个视图添加contextual action mode
b.批量添加 如:为listView or gridView的每一个选项添加
a.为某一个视图添加contextual action mode
1.实现ActionMode.Callback这个接口
接口中的方法:
onCreateActionMode 在创建的时候调用,或者调用startActionMode的时候
onPrepareActionMode 每次显示ActionMode的时候调用, 当没有做任何处理时,返回false
onActionItemClicked 处理选中事件
onDestroyActionMode 退出的时候调用,通常把ActionMode设置为null
2.当想显示ActionMode的时候调用startActionMode()方法,这个方法返回ActionMode对象。
b.批量添加
1.把要添加的listView或GridView調用setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL)
2. setMultiChoiceModeListener(),實現AbsListView.MultiChoiceModeListener 這個接口
5.創建popub menu
popubmenu是在3.0以後提供的Api
在使用xml生成菜單的時候的步驟:
a.新建一個PopupMenu對象
b.膨脹menu的xml
c.show
eg:
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.actions, popup.getMenu());
popup.show();
d.处理点击事件
popup.setOnMenuItemclickListener()来设置事件的监听
6.创建菜单组
eg:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_save"
android:icon="@drawable/menu_save"
android:title="@string/menu_save" />
<!-- menu group -->
<group android:id="@+id/group_delete">
<item android:id="@+id/menu_archive"
android:title="@string/menu_archive" />
<item android:id="@+id/menu_delete"
android:title="@string/menu_delete" />
</group>
</menu>
分组只是利于分组进行操作:
setGroupVisible() 显示或隐藏菜单组
setGroupEnabled() 使菜单组生效或失效
setGroupCheckable() 选中或不选中菜单组
Option Menu 11之后使用ActionBar来代替
Context Menu
Popup Menu
1、使用xml来定义一个Menu
好处:
在xml中菜单的结构更加清晰
把应用的行为跟菜单的内容分离
能让开发者适配不同的屏幕尺寸
eg:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game"
android:showAsAction="ifRoom"/>
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help" />
</menu>
其中showAsAction ifRoom indicate "Only place this item in the Action Bar if there is room for it."
在菜单项同时指定icon和title属性的时候,默认只是显示icon,这是想要显示两者,可以在showAsAction中添加:withText.
同时,可以使用always来时菜单项常驻,但是窄屏手机就会有问题,造成布局混乱
2、创建一个OptionMenu
在2.3以前的版本中,菜单键会调出optionMenu,默认为六个菜单,多余的会在more中出现
在3.0以后的版本中,optionMenu可以使用ActionBar来实现,默认是在OverFlow中
步骤:
a.初始化菜单选项,在要实现的activity或者fragment中重写onOptionMenuCreate()方法,在方法中去inflate菜单
eg:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
b.为菜单添加选中事件处理。
当选中菜单的时候,系统会调用Activity的onOptionsItemSelected()方法,在这个方法中会传入被选中的item(MenuItem)
通过getItemId()方法,可以获取选中菜单的id
当成功处理一个菜单事件之后,需要返回true,默认返回false
如果在Activity中包含Fragment,则先调用Activity中的onOptionsItemSelected()方法,
在去调用fragment中的onOptionsItemSelected()方法,按照添加的顺序,如果返回true之后则不会往下调用
c.动态修改菜单
在 onPrepareOptionsMenu()中会传入一个Menu对象,通过这个对象可以进行对menu进行改变
在2.3之前的系统中,每一次调用optionmenu的时候onPrepareOptionsMenu()这个方法都会调用一次。
在3.0以后的系统中,必须调用invalidateOptionMenu()才会调用这个方法。
3、创建一个ContextMenu
常用于像listView或者GridView这样的视图组中。
两种方式来实现:
1.floating context menu 一种漂浮的menu
2.contextual action mode 这种是在3.0之后的版本
a.创建一个floating context menu
1.要添加的视图先注册一下,调用registerForContextMenu方法来注册
2.重写onCreateContextMenu方法初始化菜单,eg:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
3.重写onContextItemSelected方法,处理选中菜单项事件处理
eg:
@Override
public boolean onContextItemSelected(MenuItem item) {
int itemid = item.getItemId();
if(R.id.item_one==itemid){
Toast.makeText(this, "选中了选项一", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
ps:当不进行处理的时候调用父类的方法,或者处理成功的时候返回true
4.使用contextual action mode
a.为某一个视图添加contextual action mode
b.批量添加 如:为listView or gridView的每一个选项添加
a.为某一个视图添加contextual action mode
1.实现ActionMode.Callback这个接口
接口中的方法:
onCreateActionMode 在创建的时候调用,或者调用startActionMode的时候
onPrepareActionMode 每次显示ActionMode的时候调用, 当没有做任何处理时,返回false
onActionItemClicked 处理选中事件
onDestroyActionMode 退出的时候调用,通常把ActionMode设置为null
2.当想显示ActionMode的时候调用startActionMode()方法,这个方法返回ActionMode对象。
b.批量添加
1.把要添加的listView或GridView調用setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL)
2. setMultiChoiceModeListener(),實現AbsListView.MultiChoiceModeListener 這個接口
5.創建popub menu
popubmenu是在3.0以後提供的Api
在使用xml生成菜單的時候的步驟:
a.新建一個PopupMenu對象
b.膨脹menu的xml
c.show
eg:
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.actions, popup.getMenu());
popup.show();
d.处理点击事件
popup.setOnMenuItemclickListener()来设置事件的监听
6.创建菜单组
eg:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_save"
android:icon="@drawable/menu_save"
android:title="@string/menu_save" />
<!-- menu group -->
<group android:id="@+id/group_delete">
<item android:id="@+id/menu_archive"
android:title="@string/menu_archive" />
<item android:id="@+id/menu_delete"
android:title="@string/menu_delete" />
</group>
</menu>
分组只是利于分组进行操作:
setGroupVisible() 显示或隐藏菜单组
setGroupEnabled() 使菜单组生效或失效
setGroupCheckable() 选中或不选中菜单组
7.添加意图菜单项
参考官方文档中的:UI中的Menu
0 0
- Android中的Menu的简介(翻译自官方文档)——————个人笔记
- Android中的ActionBar的简介(翻译自官方文档)——————个人笔记
- Android中的InputEventsr的简介(翻译自官方文档)——————个人笔记
- Kafka官方文档翻译——简介
- unity官方文档翻译——Android
- java中的反射 1—— 简介@译自Oracle官方文档
- android官方技术文档翻译——Android Lint
- Android官方文档翻译——Context(一)
- android官方技术文档翻译——工具属性
- android官方技术文档翻译——switch 语句转换
- android官方技术文档翻译——aar 格式
- Android官方技术文档翻译——Apk 拆分机制
- Android官方技术文档翻译——ApplicationId 与 PackageName
- Android官方技术文档翻译——构建工作流
- Android官方技术文档翻译——ApplicationId 与 PackageName
- Android官方技术文档翻译——清单合并
- Android官方技术文档翻译——Eclilpse项目迁移
- Android官方技术文档翻译——IntelliJ 项目迁移
- u-boot和Kernel及busybox官方下载地址
- Convert Sorted Array to Binary Search Tree
- CA 解密系统原理及流程
- KeyedHandler类源码
- MFC DLL——Regular DLL and Extension DLL
- Android中的Menu的简介(翻译自官方文档)——————个人笔记
- Linux驱动开发之七----按键驱动poll实现
- 在eclipse在线安装CheckStyle出错
- CSRF verification failed. Request aborted.
- RowProcesser接口源码及示例
- Factory Methods
- AD RMS个人技术博客记录
- 前缀、中缀、后缀表达式
- 【转】你的企业是否拥有互联网思维?!