Android中的Menu(菜单)

  1. 选项菜单:最常规的菜单,android中把它叫做option menu
  2. 子菜单:android中点击子菜单将弹出悬浮窗口显示子菜单项。子菜单不支持嵌套,即子菜单中不能再包括其他子菜单。
  3. 上下文菜单(context menu):android中长按视图控件后出现的菜单,windows点击右键弹出的菜单即上下文菜单
  4. 图标菜单:这个比较简单,就是带icon的菜单项,需要注意的是子菜单项、上下文菜单项、扩展菜单项均无法显示图标
  5. 选择菜单(alternative menu):用的比较少,以后单独介绍,本文先跳过(其实是我还没弄明白啦o(≧v≦)o~~)
  6. 扩展菜单:选项菜单最多只能显示6个菜单项,超过6个时,第6个菜单项会被系统替换为一个叫“更多”的子菜单,原来显示不下的菜单项都作为“更多”菜单的子菜单项。

选项菜单及子菜单
<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android=" http://schemas.android.com/apk/res/android" >  

<!-- 我们分三种情况进行设置 -->  
<!-- Part 1 :普通情况,我们增加三个MenuItem,item对应MenuItem的格式。item中的android:id直接就是item的ID,即我们menu.add()中的第二个参数。 -->  
<!-- title为显示的文字,即menu.add()中的第四个参数 -->  
<!-- orderInCategory表明摆放的顺序,不一定从0还是计算,但必须大于等于0,数值小的位于前,如果数值一样,则安顺序摆放,此相当于menu.add()中的第三个参数order。当然我们建议从0,1,2,3....这样依次给出,并且与XML行文的顺序一致。 -->  
<!-- icon设置图标,不言自喻 -->  
<item  
android:id="@+id/menu_quit"  
android:title="@string/menu_quit_title"  
android:orderInCategory="0"  
android:icon="@drawable/menu_close_window"/>  
<item  
android:id="@+id/menu_help"  
android:title="@string/menu_help_title"  
android:orderInCategory="1"  
android:icon="@drawable/menu_help"/>  
<item  
android:id="@+id/menu_setting"  
android:title="@string/menu_setting_title"  
android:orderInCategory="2"  
android:icon="@drawable/menu_syssettings"/>  

<!-- Part 2 :Group的情况,我们在Group中放入2个item,如果我们要显示3.4的方式,可以增加group的参数android:checkableBehavior来设置,single表示radio box,all表示checkbox,none表示checkable=flase。group中的android:id就是Gourp_ID,即menu.add()中的第一个参数。在这个例子中,我们设置这个group不可视,如果需要显示,代码为:menu.setGroupVisible(R.id.c11_other_stuff, true);-->  
<!-- menuCategory指定菜单的优先级 -->  
<!-- checkableBehavior指定菜单的选择行为,none(不可选),all(多选),single(单选) -->  
<!-- enabled 指定菜单项是否可用 -->  
<!-- visible 指定菜单项是否可见 -->  
<group  
android:id="@+id/menu_group"  
android:menuCategory="secondary"  
android:checkableBehavior="single"  
android:visible="false">  
<item  
android:id="@+id/menu_group_about"  
android:title="@string/menu_group_about_title"  
android:orderInCategory="0"  
android:icon="@drawable/menu_about"/>  
<item  
android:id="@+id/menu_group_copy"  
android:title="@string/menu_group_copy_title"  
android:orderInCategory="1"  
android:icon="@drawable/menu_copy"/>  
</group>  

<!-- Part 3 :子menu的设置,将在menuItem内部嵌套一个<Menu>,在这个例子中的子菜单,试验了快捷键的方式 -->  
<!-- alphabeticShortcut 按键快捷方式 -->  
<item  
android:id="@+id/menu_submenu"  
android:orderInCategory="3"  
android:title="@string/menu_submenu_title">  
<menu>  
<item  
android:id="@+id/menu_submenu_share"  
android:title="@string/menu_submenu_share_title"  
android:icon="@drawable/menu_sharepage"  
android:visible="true"  
android:alphabeticShortcut="f"/>  
<item  
android:id="@+id/menu_submenu_search"  
android:title="@string/menu_submenu_search_title"  
android:icon="@drawable/menu_search"  
android:visible="true"  
android:alphabeticShortcut="s"/>  
</menu>  
</item>  
</menu>


/**
  * Menu键菜单
  */
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater menuInflater = getMenuInflater();
  menuInflater.inflate(R.menu.expanded_menus, menu);
  return super.onCreateOptionsMenu(menu);
 }
 /**
  * Menu键菜单响应
  */
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.menu_quit:
   this.finish();
   break;
  case R.id.menu_help:
   Toast.makeText(this, "帮助信息", Toast.LENGTH_LONG).show();
   break;
  }
  return true;
 }



上下文菜单
<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android=" http://schemas.android.com/apk/res/android" >  
<item  
android:id="@+id/contextmenu_group_about"  
android:icon="@drawable/menu_about"  
android:orderInCategory="0"  
android:title="@string/menu_group_about_title"/>  
<item  
android:id="@+id/contextmenu_group_copy"  
android:title="@string/menu_group_copy_title"  
android:orderInCategory="1"  
android:icon="@drawable/menu_copy"/>  
</menu>


public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  f indViewById(R.id.tv).setOnCreateContextMenuListener(this); //上下文菜单一定要添加Listener
 }
/**
  * 上下文菜单
  */
 public void onCreateContextMenu(ContextMenu menu, View v,
   ContextMenuInfo menuInfo) {
  MenuInflater menuInflater = getMenuInflater();
  menuInflater.inflate(R.menu.context_menu, menu);
  super.onCreateContextMenu(menu, v, menuInfo);
 }
 
 /**
  * 上下文菜单响应
  */
 public boolean onContextItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.contextmenu_group_about:
   Toast.makeText(this, "详细信息", Toast.LENGTH_LONG).show();
   break;
  }
  return true;
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值