用短按而不是长按来显示上下文菜单

10
我在上下文菜单方面有问题,我有一个控件“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个回答

14

我所能想到的唯一方法是将 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);
 }
}

不需要为此创建一个新的视图,我想你可以使用任何你想应用于的视图。希望这就是你想要的,并且这可以帮到你。


1
万岁!祝编码好运 :0) - Matt

3

我认为你应该使用弹出式菜单而不是上下文菜单。请查看文档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中调用此方法并传递您的按钮。


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" />

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