显示上下文菜单,短按不长按

时间:2010-12-29 05:12:09

标签: java android eclipse contextmenu imageview

我的上下文菜单有问题,当你长按一下显示上下文菜单时,我有一个控件“ImageButton”。

我需要通过短暂的点击显示上下文菜单,而不是长按,这可能吗?

这是我目前使用的代码,菜单运行正常。

    private ImageView btnRutas;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.fclientes);

        btnRutas =(ImageView)findViewById(R.id.btnRutas);

        btnRutas.setOnClickListener(this);

        registerForContextMenu(btnRutas); 

    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {

        if(v.getId()== R.id.btnRutas) {

            menu.setHeaderIcon(android.R.drawable.ic_menu_more);
            menu.setHeaderTitle("Rutas");
            menu.add(0, 0, 0, "Ruta 1");

        } 

        super.onCreateContextMenu(menu, v, menuInfo);
    } 

    @Override
    public boolean onContextItemSelected(MenuItem item) {

    switch (item.getItemId()){

    case 0:

        function();

        }

    }

提前致谢。

3 个答案:

答案 0 :(得分:13)

我能想到的唯一方法是使用onClickListener()作为活动的一部分:

public class MyActivity extends Activity implements OnClickListener{
 protected void onCreate(Bundle bundle) {
    //Usual Activity Stuff
    View v = (View)findViewById(R.id.view); 
    v.setOnClickListener(this);
 }

 public void onClick(View v) {
  super.onClick(v);
  this.openContextMenu(v);
 }
}

我没有专门为此创建一个新的View,我猜你会使用你想要的任何View来应用。我希望这就是你想要的,这会有所帮助。

答案 1 :(得分:0)

在代码中不添加任何OnClickListener,只能在xml中执行。只需转到ImageView并添加:

android:onClick="openContextMenu"

这是一个例子。

            <ImageView
            android:id="@+id/btnRutas"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="openContextMenu" />

答案 2 :(得分:0)

我认为您应该使用弹出菜单而不是上下文菜单。检查文档https://developer.android.com/guide/topics/ui/menus,或这样做:

  private void showMenu(View v){
    PopupMenu popup = new PopupMenu(context, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.your_menu, popup.getMenu());
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.menu_item1:
                    //your code
                    return true;
                case R.id.menu_item2:
                    //your code
                    return true;
                case R.id.menu_item3:
                    //your code
                    return true;
                default:
                    return false;
            }
        }
    });
    popup.show();
}

在按钮的onClickListener中调用此方法并传递按钮。