Menu在Android开发中很常用,一般情况下,创建一个菜单有两种方法。一种是在机子本身带的Menu按键上创建一个菜单,另外一种是利用OnCreateContextMenu创建一个菜单,下面是这两种方法的具体实现方式。
<1> 当在机子本身带的Menu按键上创建一个菜单时,我们要重写Activity中的onCreateOptionsMenu和onOptionsItemSelected以及onPrepareOptionsMenu方法,利用前者我们可以创建一个自己需要的菜单。
下面是我根据需要创建的一个菜单的代码:
1 @Override
2 public boolean onCreateOptionsMenu(Menu menu) {
3 menu.add(0, 1, 1, "exit").setIcon(android.R.drawable.ic_delete);//可以设置菜单选项的图片
4 menu.add(0, 2, 1, "about");//groupId,itemId,order,title
5 menu.add(1, 3, 2, "help");
6 menu.add(1, 4, 2, "send");
7 menu.add(2, 5, 2, "call");
8 menu.add(2, 6, 1, "tom");
9 menu.add(2, 7, 1, "john");
10 return super.onCreateOptionsMenu(menu);
11 }
运行界面如下:
当你创建的菜单中含有6个以上的项目时,由于不能完全显示,所以会用一个“更多”按钮来显示。onPrepareOptionsMenu方法是在创建完菜单后对菜单进行管理,在这里我们可以设置一个菜单项不可用,或者可以利用创建菜单时设置的groupId来对相同的一组菜单项进行管理。
根据业务需求,你想让你创建的菜单中的各个项目实现什么功能,这是要用到onOptionsItemSelected来实现菜单项的各个功能。下面是我自己实现的一个很简单的功能,在这里只是为了说明这个方法怎么用。所以写的很简单。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
Intent intent=new Intent();
switch (id) {
case 1:
finish();//退出
break;
case 2:
Toast.makeText(TestMenuActivity.this, "this is a joke!",
Toast.LENGTH_LONG).show();//toast显示一下
break;
case 4:
intent.setClass(TestMenuActivity.this,OtherActivity.class );
TestMenuActivity.this.startActivity(intent);//跳转到另一个页面
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
<2>当我们不希望利用机子本身带的Menu来创建菜单时,我们可以利用Activity中的任何控件来创建监听,来实现创建菜单的功能。在这里我们要用到onCreateContextMenu和onContextItemSelected方法。用到了setOnCreateContextMenuListener来创建一个监听。
在利用onCreateContextMenu方法创建菜单时,这里又有两种方法可以实现,一种是在res中创建一个Menu文件夹,在该文件夹中创建一个xml文件,通过设计xml实现一个菜单(<menu></menu>)。然后在方法中利用MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.xml文件名, menu);方法引用这个菜单。另一种是直接在该方法中使用add方法进行添加。下面是我自己为了说明这两种方法的使用做的一个简单的创建菜单的代码:
Activity中的代码:
1findViewById(R.id.textView).setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
2
3 @Override
4 public void onCreateContextMenu(ContextMenu menu, View v,
5 ContextMenuInfo menuInfo) {
6 MenuInflater inflater = getMenuInflater();
7 inflater.inflate(R.menu.menu1, menu);
8 //menu.add(0, 1, 1, "tom");
9 }
10 });
这里我在res中创建一个Menu文件夹,在该文件夹中创建一个menu.xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item android:id="@+id/new_game" android:title="New Game" />
<item android:id="@+id/quit" android:title="Quit" />
</group>
</menu>
通过上面所做的我们就可以创建一个菜单了。下面是运行效果界面:
另外一种是在我们重写onCreateContextMenu方法时,直接利用menu添加菜单。在这里我就不具体说明怎么做了。其结果和上面的结果是一样的。
在创建外菜单后,我们还是要对菜单进行功能的实现。在这里就要重写onContextItemSelected方法。下面是我为了说明这个方法的用法写的一段简单代码供大家参考。
1@Override
2 public boolean onContextItemSelected(MenuItem item) {
3 AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
4 .getMenuInfo();
5 Intent intent=new Intent();
6 switch (item.getItemId()) {
7 case R.id.new_game:
8 intent.setClass(TestMenuActivity.this,OtherActivity.class );
9 TestMenuActivity.this.startActivity(intent);//Activity跳转
10 /*Toast.makeText(TestMenuActivity.this, "this is a new_game",
11 Toast.LENGTH_LONG).show();*/
12 return true;
13 case R.id.quit:
14 finish();//结束退出
15 return true;
16 default:
17 return super.onContextItemSelected(item);
18 }
19 }
这样我们就用两种方式实现了一个菜单。菜单对于实现一个业务需求很有用处,希望大家能掌握这两种简单的菜单创建方法。