ContextMenu 实现了 Menu 接口。当在某个 View 上长按时,就可以让 ContextMenu 出现。
ContextMenu 的 Item 不支持 Icon 。
1. 创建一个 Android Project ,修改缺省的 main.xml ,使之如下:
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "vertical"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:gravity = "center_horizontal"
>
< Chronometer
android:id = "@+id/chronometer"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:format = "%s"
android:textSize = "80px"
android:textColor = "#FFFF00"
/>
</ LinearLayout >
2. 创建一个 context_menu.xml 文件,用作菜单资源:
点击 Finish 按钮,编辑 context_menu.xml ,使其内容如下:
<? xml version = "1.0" encoding = "utf-8" ?>
< menu
xmlns:android = "http://schemas.android.com/apk/res/android" >
< item
android:id = "@+id/timer_start"
android:title = " 开始计时 "
/>
< item
android:id = "@+id/timer_stop"
android:title = " 终止计时 "
/>
< item
android:id = "@+id/timer_reset"
android:title = " 清零 "
/>
</ menu >
3. 把需要用到的图标 compass.png ,拖入到 Eclipse 项目中的 res/drawable-mpdi 文件夹下。
4. 编写 Activity 对应的代码如下:
public class ControlContextMenu extends Activity
{
private Chronometer timer ;
@Override
public void onCreate(Bundle savedInstanceState)
{
super .onCreate(savedInstanceState);
setContentView(R.layout. main );
// 获得计时器对象
timer = (Chronometer) this .findViewById(R.id. chronometer );
// 使得用户长按计时器时 , 可以出现 ContextMenu
this .registerForContextMenu( timer );
}
// alt+Shift+S 重写 onCreateContextMenu : 创建 ContextMenu
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
super .onCreateContextMenu(menu, v, menuInfo);
// ContextMenu 的 Item 不支持 Icon , 所以不用再资源文件中 , 为它们设定图标
if (v.getId() == R.id. chronometer )
{
this .getMenuInflater().inflate(R.menu. context_menu , menu); // 读取资源 , 并创建菜单项
menu.setHeaderIcon(R.drawable. compass ); // 设定头部图标
menu.setHeaderTitle( " 计时器控制选项 " ); // 设定头部标题
}
}
// alt+Shift+S 重写 onContextItemSelected : ContextMenu 中的菜单项对应的代码
@Override
public boolean onContextItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id. timer_start :
timer .setBase(SystemClock.elapsedRealtime ()); // 将 chronometer 的显示清零
timer .start(); // 然后开始计时
break ;
case R.id. timer_stop :
timer .stop();
break ;
case R.id. timer_reset :
timer .setBase(SystemClock.elapsedRealtime ()); // 将 chronometer 的显示清零
break ;
}
return super .onContextItemSelected(item);
}
}
4. 运行结果
长按计时器后,会出现 ContextMenu 如下:
选中其中的一个菜单项,就可以进行相应的工作。