Android应用开发学习笔记之菜单
Android中的菜单分为选项菜单(OptionMenu)和上下文菜单(Context Menu)。通常使用菜单资源文件创建菜单。菜单资源文件通常放置在res\menu目录下,这个目录默认情况下是不存在的,需要我们自己创建该目录。菜单资源的根元素通常是<menu></menu>标记,在该标记中可以包含两种子元素:
1、<item></item>标记,用于定义菜单项。如果某个菜单项中还包括子菜单,可以通过在该菜单项中再包含<menu></menu>标记来实现。
2、<group></group>标记,用于将多个<item></item>标记定义的菜单包装成一个菜单组。
一、菜单的创建步骤
1、 选项菜单
当用户单击菜单按钮时,弹出的菜单就是选项菜单,创建选项菜单的步骤如下:
(1) 重写Activity的onCreateOptionsMenu()方法。在该方法中,首先创建一个用于解析菜单资源文件的MenuInflater对象,然后调用该对象的inflate()方法解析一个菜单资源文件,并把解析后的菜单保存在menu中。关键代码如下:
[java]
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=new MenuInflater(this); //实例化一个MenuInflater对象
inflater.inflate(R.menu.optionmenu, menu); //解析菜单文件
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=new MenuInflater(this); //实例化一个MenuInflater对象
inflater.inflate(R.menu.optionmenu, menu); //解析菜单文件
return true;
}
(2) 重写onOptionsItemSelected()方法,用于当菜单被选择时,做出相应处理。关键代码举例如下:
[java]
// Called when an options item is clicked
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_setting:
Log.d(TAG, "menu item setting is selected.");
startActivity(new Intent(this, Settings.class));
break;
case R.id.menu_history:
Log.d(TAG, "menu item history is selected.");
startActivity(new Intent(this, History.class));
break;
case R.id.menu_about:
Log.d(TAG, "menu item about is selected.");
break;
}
return true;
}
// Called when an options item is clicked
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_setting:
Log.d(TAG, "menu item setting is selected.");
startActivity(new Intent(this, Settings.class));
break;
case R.id.menu_history:
Log.d(TAG, "menu item history is selected.");
startActivity(new Intent(this, History.class));
break;
case R.id.menu_about:
Log.d(TAG, "menu item about is selected.");
break;
}
return true;
}
2、 上下文菜单
当用户在某个控件上长时间按住不放,这时弹出的菜单就是上下文菜单。创建上下文菜单的步骤如下:
(1)、在Activity的onCreate()方法中注册上下文菜单,例如,为文本框组件注册上下文菜单(也就是说在按住该文本框时,才显示上下文菜单),可以使用下面的代码,:
[java]
TextView tv = (TextView)findViewById(R.id.textView);
registerForContextMenu(tv);
TextView tv = (TextView)findViewById(R.id.textView);
registerForContextMenu(tv);
(2)、重写Activity的onCreateContextMenu()方法,在该方法中,首先创建一个用于解析菜单资源的MenuInflater对象,然后调用该对象的inflate()方法解析菜单资源文件,并把解析后的菜单保存在menu中,最后为菜单头设置图标和标题。关键代码如下:
[java]
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflator=new MenuInflater(this); //实例化一个MenuInflater对象
inflator.inflate(R.menu.contextmenu, menu); //解析菜单文件
menu.setHeaderIcon(R.drawable.ic_launcher); //为菜单头设置图标
menu.setHeaderTitle("选择颜色:"); //为菜单头设置标题
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater
补充:移动开发 , Android ,