在Android中如何打开浮动菜单(上下文菜单)?

5
我创建了一个新的菜单,名为drmenu.xml。当我按下菜单按钮时,它能正常工作,但是当用户按下按钮时,我需要打开上下文菜单。 以下代码中,按钮只会显示一个toast。
这是我的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);
        }

1
你到底在做什么?MenuCall是一个ImageView,你要将它转换为LinearLayout吗? - Pedro Oliveira
2个回答

7
如果您想创建一个上下文菜单,您需要调用方法registerForContextMenu(),并将应与上下文菜单关联的视图传递给它。
例如,假设要将上下文菜单与按钮关联:
Button button = (Button) findViewById(R.id.my_button);
registerForContextMenu(button);

这个方法可以在你的Activity的onCreate()中调用。然后,在同一个Activity中,你需要重写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在整个树中不必唯一,但在您搜索的树的部分中应该是唯一的(通常可能是整个树),因此最好在可能的情况下完全唯一。


0

正如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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接