return super.onOptionsItemSelected(item);
}
2. 上下文菜单
当用户长时间按键不放时,弹出的菜单就是上下文菜单。使用菜单资源创建上下文菜单的具体步骤如下。
(1)在Activity的onCreate()方法注册上下文菜单。例如,为文本框组件注册上下文菜单,可以使用下面的代码。也就是在单击该文本框时,才显示上下文菜单。
TextView tv=(TextView)findViewById(R.id.show);
registerForContextMenu(tv); //为文本框注册上下文菜单
(2)重写Activity中的onCreateContextMenu()方法。在该方法中,首先创建一个用于解析菜单资源文件的MenuInflater对象,然后调用该对象的inflate()方法解析一个菜单资源文件,并把解析后的菜单保存在menu中,最后为菜单头设置图标和标题,关键代码如下:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
MenuInflater inflator=new MenuInflater(this); //实例化一个MenuInflater对象
inflator.inflate(R.menu.menus, menu); //解析菜单文件
menu.setHeaderIcon(R.drawable.ic_launcher); //为菜单头设置图标
menu.setHeaderTitle("请选择"); //为菜单头设置标题
}
(3)重写onContextItemSelected()方法,用于当菜单项被选择时,做出相应的处理。例如,当菜单项被选择时,弹出一个消息提示框显示被选中菜单项的标题,可以使用下面的代码:
@Override
public boolean onContextItemSelected(MenuItem item) {
Toast.makeText(MainActivity.this, item.getTitle() , Toast.LENGTH_SHORT).show();
return super.onContextItemSelected(item);
}
8.9.3 范例1:创建上下文菜单
例8.6 在Eclipse中创建Android项目,名称为8.6,实现一个用于改变文字颜色的上下文菜单。(实例位置:光盘\TM\sl\8\8.6)
(1)在res目录下创建一个menu目录,并在该目录中创建一个名称为contextmenu.xml的菜单资源文件,在该文件中,定义4个代表颜色的菜单项和一个恢复默认菜单项,具体代码如下:
(2)打开默认创建的布局文件main.xml,修改默认添加的TextView文本框,修改后的代码如下:
android:id="@+id/show"
android:textSize="28px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="打开菜单..." />
(3)在Activity的onCreate()方法中,首先获取要添加上下文菜单的文本框,然后为其注册上下文菜单,关键代码如下:
private TextView tv;
… //省略部分代码
tv=(TextView)findViewById(R.id.show);
registerForContextMenu(tv); //为文本框注册上下文菜单
(4)在Activity的onCreate()方法中,重写onCreateContextMenu()方法,在该方法中,首先创建一个用于解析菜单资源文件的MenuInflater对象,然后调用该对象的inflate()方法解析一个菜单资源文件,并把解析后的菜单保存在menu中,最后再为菜单头设置图标和标题,关键代码如下:
@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("请选择文字颜色:"); //为菜单头设置标题
}
(5)重写onContextItemSelected()方法,在该方法中,通过Switch语句使用用户选择的颜色来设置文本框中显示文字的颜色,具体代码如下:
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.color1: //当选择红颜色时
tv.setTextColor(Color.rgb(255, 0, 0));
break;
case R.id.color2: //当选择绿颜色时
tv.setTextColor(Color.rgb(0, 255, 0));
break;
case R.id.color3: //当选择蓝颜色时
tv.setTextColor(Color.rgb(0, 0, 255));