万书网 > 文学作品 > Android从入门到精通 > 第90页

第90页





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));