我创建了一个新菜单,名为drmenu.xml。当我按下菜单按钮时,它可以正常工作,但当用户按下按钮时,我需要打开一个上下文菜单。下面的代码按钮只是显示祝酒词。
这是我的xml布局:
<LinearLayout
android:id="@+id/MenuCall"
android:layout_width="90dip"
android:layout_height="match_parent"
android:gravity="right|center_vertical" >
<ImageView
android:id="@+id/MenuCall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/imageiew6" />
</LinearLayout>
这是我的java代码:
final LinearLayout callback_var = (LinearLayout) findViewById(R.id.MenuCall);
registerForContextMenu(callback_var);
callback_var.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "this is repeated", Toast.LENGTH_LONG).show();
openContextMenu(callback_var);
}
如果您想要创建上下文菜单,您必须调用方法registerForContextMenu()
,将应该与上下文菜单关联的View传递给它。
例如,假设将上下文菜单与按钮关联:
Button button = (Button) findViewById(R.id.my_button);
registerForContextMenu(button);
可以在"活动"的onCreate()中调用。然后,在同一个活动中,您需要重写onCreateContextMenu()
方法。
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.your_context_menu, menu);
}
然后,您必须实现onContextItemSelected()
,以便在按下上下文菜单中的项目时触发正确的操作:
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.first_action:
// your first action code
return true;
case R.id.second_action:
// your second action code
return true;
default:
return super.onContextItemSelected(item);
}
}
现在,长按该按钮将打开您在your_context_menu.xml
文件中定义的上下文菜单。
考虑一下,长按打开上下文菜单符合Android标准的UI,然而,如果你想让上下文菜单出现在一个简单的点击上,你可以在这里查看答案
注意:正如这里所说
ID在整个树中不必是唯一的,但它应该是在您正在搜索的树的部分中是唯一的(这可能经常是整棵树,所以当可能)。
正如Joseph82所说,对于上下文菜单,我们可以使用这种方式。我发现使用选项菜单我们可以使用吹码:在Oncreate方法中写下:
final LinearLayout callback_var = (LinearLayout) findViewById(R.id.MenuCall);
callback_var.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
openOptionsMenu();
}
});
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater mnu = getMenuInflater();
mnu.inflate(R.menu.darunamamenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId())
{
case R.id.firstpage:
break;
case R.id.exit:
finish();
System.exit(0);
break;
case R.id.setting:
Intent Settingact = new Intent(G.currentActivity, SettingActivity.class);
G.currentActivity.startActivity(Settingact);
G.currentActivity.finish();
break;
case R.id.regalarm:
Intent RegAlarm = new Intent(G.currentActivity, alarmsetter.class);
G.currentActivity.startActivity(RegAlarm);
G.currentActivity.finish();
break;
case R.id.inform:
Intent inform = new Intent(G.currentActivity, ActivityInformation.class);
G.currentActivity.startActivity(inform);
G.currentActivity.finish();
break;
}
return super.onOptionsItemSelected(item);
}