Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中打开浮动菜单(上下文菜单)?_Android_Android Menu_Android Contextmenu - Fatal编程技术网

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

在Android中打开浮动菜单(上下文菜单)?,android,android-menu,android-contextmenu,Android,Android Menu,Android Contextmenu,我创建了一个新菜单,名为drmenu.xml。当我按下菜单按钮时,它可以正常工作,但当用户按下按钮时,我需要打开上下文菜单。 下面的代码按钮只显示一个祝酒词 这是我的xml布局: <LinearLayout android:id="@+id/MenuCall" android:layout_width="90dip" android:layout_height="match_parent" android:gravity="

我创建了一个新菜单,名为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>

如果要创建上下文菜单,必须调用方法
registerForContextMenu()
将应与上下文菜单关联的视图传递给它

例如,假设将上下文菜单与按钮关联:

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\u context\u menu.xml
文件中定义的上下文菜单

考虑一下,长按打开上下文菜单符合Android标准UI,但是如果您希望上下文菜单显示在一个简单的点击上,您可以查看

注意: 如前所述

ID不必在整个树中都是唯一的,但应该是唯一的 在您正在搜索的树的部分中是唯一的(通常 是整棵树,所以最好在 可能的)


正如Joseph82所说的上下文菜单,我们可以使用这种方式。我发现使用选项菜单我们可以使用blow代码: 在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);
}

你到底在干什么?MenuCall是一个ImageView,您要将其转换为LinearLayout?
    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);
}