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()  选中或不选中菜单组


7.添加意图菜单项

参考官方文档中的:UI中的Menu

  
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果6s出现耳机模式怎么办 苹果6变成了耳机模式怎么办 苹果手机成耳机模式了怎么办 华为mate8耳机声音小怎么办 移动sim卡丢了怎么办 蓝牙耳机开不开机怎么办 苹果手机蓝牙不匹配怎么办 苹果6蓝牙坏了怎么办 蓝牙密钥不正确不匹配怎么办 华为p6开不了机怎么办 华为c199手机不停重启怎么办 华为手机用户数据被锁定怎么办 朵唯手机丢了怎么办 网件r6220穿墙差怎么办 无线网打王者卡怎么办 酷翼x9忘了密码怎么办 楼上的路由器楼下不好使怎么办 电信4g网络不好怎么办 农村只有2g网怎么办 电信卡4g网速慢怎么办 小米手机触屏失灵怎么办 荣耀v10电信网速很慢怎么办 华为路由器掉线了怎么办 三星s6只识别一张卡怎么办 华为手机卡不显示了怎么办 华为账号手机卡丢了怎么办 荣耀8耗电量太快怎么办 vivo卡2不显示怎么办 电信宽带玩王者荣耀卡怎么办 联通4g玩游戏卡怎么办 华为悦盒遥控器丢了怎么办 6s不能用电信卡怎么办 iphone6电信卡无服务怎么办 魅族手机电信卡怎么办 小米手机读不出sim卡怎么办 魅蓝note6耗电快怎么办 oppo手机下载密码忘了怎么办 华为v9玩飞车卡怎么办 苹果7耳机转换器不支持怎么办 华为mate10耳机声音小怎么办 200打一年到期了怎么办