【问题标题】:Opening a floating menu (context menu) in Android?在 Android 中打开浮动菜单(上下文菜单)?
【发布时间】:2014-10-01 17:13:02
【问题描述】:

我创建了一个名为 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);
        }

【问题讨论】:

  • 你到底在做什么? MenuCall 是一个 ImageView,而您要将其转换为 LinearLayout?

标签: android android-menu android-contextmenu


【解决方案1】:

如果你想创建一个上下文菜单,你必须调用方法registerForContextMenu() 传递给它应该与上下文菜单关联的视图。

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

Button button = (Button) findViewById(R.id.my_button);
registerForContextMenu(button);

可以在你的 Activity 的 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,但是如果您希望您的上下文菜单在简单的点击时出现,您可以查看 here the answer

注意: 正如here所说的

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多