android菜单
1.选项菜单(OptionsMenu):
Options Menu是在单击Menu菜单键的时候弹出的菜单
public boolean onCreateOptionsMenu(Menu menu):首次显示的时候调用
public boolean onOptionsItemSelected(MenuItem item):选中菜单项后发生的动作。
public void onOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。
public boolean onPrepareOptionsMenu(Menu menu):每次显示前调用
public boolean onMenuOpened(int featureId, Menu menu):菜单打开后发生的动作。可以在这里Disable/enable某个菜单项
代码创建子菜单项:
public boolean onCreateOptionsMenu(Menu menu) {
3 // TODO Auto-generated method stub
4 menu.add(1, 1, 1, "设置");
5 return super.onCreateOptionsMenu(menu);
6 }
7 @Override
8 public boolean onMenuItemSelected(int featureId, MenuItem item) {
9 // TODO Auto-generated method stub
10 if(item.getItemId() == 1){
11 finish();
12 }
13 return super.onMenuItemSelected(featureId, item);
14 }
xml创建子菜单项:
这里我在res/menu/中定义自己的Menu的xml文件mymenu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/about"
android:icon="@drawable/about"
android:title="关于"/>
<item
android:id="@+id/exit"
android:icon="@drawable/exit"
android:title="退出"/>
</menu>
然后在Activity中的onCreateOptionsMenu()回调函数中生成这个Menu:
public class ShowMenu extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* 这个方法只会调用一次,这个Menu会被反复调用
*/
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mymenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int itemId = item.getItemId();
switch (itemId)
{
case R.id.about:
Toast.makeText(this, "这是个OptionsMenu测试", Toast.LENGTH_LONG).show();
return true;
case R.id.exit:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
}
2.上下文菜单(ContextMenu)
长按一个组件的时候弹出来的菜单,Options Menu的Item可以添加图标和快捷键,而Context Menu则不能
1、覆盖Activity的onCreateContextMenu()方法,调用Menu的add()方法添加菜单选项
//上下文才菜单(Context Menu),当用户长时间按键不放弹出的菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, 0, 0, "contextMenu");
menu.add(0, 1, 0, "contextMenu1");
menu.add(0, 2, 0, "contextMenu2");
}
2、覆盖onContextItemSelected()方法,响应菜单事件
//选择上下文菜单之后触发的事件
@Override
public boolean onContextItemSelected(MenuItem item) {
System.out.println(item.getItemId());
switch(item.getItemId()){
case 0:
Toast.makeText(getApplicationContext(), "case 0", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(getApplicationContext(), "case 1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(getApplicationContext(), "case 2", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
3、调用Activity的registerForContextMenu()方法,为视图注册上下文菜单
TextView textView = (TextView)findViewById(R.id.textView);
registerForContextMenu(textView);
备注:一定要有可以注册的控件,然后用户一直按着这个控件,就会弹出ContextMenu的内容
创建菜单也可以用menu中的xml定义(不能有图标和快捷键),其他一样
补充:移动开发 , Android ,