Android Menu(Context Menu,Options Menu,SubMenu)实例

本文介绍了一个Android应用程序中菜单功能的具体实现方式,包括选项菜单和上下文菜单的创建、显示及响应处理过程。通过示例代码展示了如何根据不同场景动态更新菜单项。
package com.cocol.activity; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MenuActivity extends Activity{ private final int MENU_ADD=1,MENU_SEND=2,MENU_DEL=3; private final int GROUP_DEFAULT=0,GROUP_DEL=1; private final int ID_DEFAULT=0; private final int ID_TEXT1=1,ID_TEXT2=2,ID_TEXT3=3; private String[] choices={"Press Me","Try Again","Change Me"}; private static int itemNum=0; private static TextView bv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.menu_layout); bv=(TextView)findViewById(R.id.focus_text); this.registerForContextMenu(bv); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { Log.i("MenuActivity","onCreateContextMenu"); if(v.getId()==R.id.focus_text){ SubMenu textMenu=menu.addSubMenu("Change Text"); textMenu.add(0,ID_TEXT1,0,choices[0]); textMenu.add(0,ID_TEXT2,0,choices[1]); textMenu.add(0,ID_TEXT3,0,choices[2]); menu.add(0,ID_DEFAULT,0,"Original Text"); } super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onCreateOptionsMenu(Menu menu) { Log.i("MenuActivity","onCreateOptionsMenu"); menu.add(GROUP_DEFAULT, MENU_ADD, 0, "Add").setIcon(R.drawable.icon); menu.add(GROUP_DEFAULT,MENU_SEND,0,"Send"); menu.add(GROUP_DEL,MENU_DEL,0,"Delete"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case MENU_ADD: createNote(); break; case MENU_SEND: sendNote(); break; case MENU_DEL: deleteNote(); break; } return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { Log.i("MenuActivity","onPrepareOptionsMenu"); if(itemNum>0){ menu.setGroupVisible(GROUP_DEL, true); }else{ menu.setGroupVisible(GROUP_DEL, false); } return super.onPrepareOptionsMenu(menu); } @Override public boolean onContextItemSelected(MenuItem item) { switch(item.getItemId()){ case ID_DEFAULT: bv.setText("Hello"); return true; case ID_TEXT1: case ID_TEXT2: case ID_TEXT3: bv.setText(choices[item.getItemId()-1]); return true; } return super.onContextItemSelected(item); } void createNote(){ itemNum++; } void deleteNote(){ itemNum--; } void sendNote(){ Toast.makeText(this, "Item: "+itemNum,Toast.LENGTH_LONG).show(); } }

总结调用顺序:

点击“Menu" 键时,调用 onCreateOptionsMenu---->onPrepareOptionsMenu.之后,再点击‘Menu" 键时,onCreateOptionsMenu不会被调用,但onPrepareOptionsMenu会被调用,在这里可以动态的改变菜单。

至于ContextMenu,每次长按view. 弹出菜单栏,都会调用onCreateContextMenu.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值