public class ContextMenuActivity extends Activity
implements View.OnClickListener {
private String TAG = ContextMenuActivity.class.getSimpleName();
TextView txt;
ContextMenu menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_context_menu);
txt = (TextView) findViewById(R.id.txt);
txt.setOnClickListener(this);
registerForContextMenu(txt);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterForContextMenu(txt);
}
@Override
public void onClick(View v) {
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case 0:
Toast.makeText(this, "菜单1", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "菜单2", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "子菜单", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "子菜单项1", Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(this, "子菜单项2", Toast.LENGTH_SHORT).show();
break;
}
return super.onMenuItemSelected(featureId, item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("上下文菜单");
menu.setHeaderIcon(R.mipmap.ic_launcher);
menu.add(0, 0, Menu.NONE, "菜单项1");
menu.add(2, 1, Menu.NONE, "菜单项2");
SubMenu sub = menu.addSubMenu(1, 2, Menu.NONE, "子菜单");
sub.add(1, 3, Menu.NONE, "子菜单项1");
sub.add(1, 4, Menu.NONE, "子菜单项2");
}
}
需要注意几点:
(1)ContextMenu可以绑定在任意的View上面,比如这里的TextView。其他的ListView也是一样。
(2)ItemId非常的重要,onMenuItemSeleected()就是根据这个ItemId来进行处理的。
(3)在register的时候,主要要unregister。
(4)可以看到子菜单还会弹出的。