Показать контекстное меню коротким щелчком, а не длинным щелчком

У меня проблема с контекстным меню, у меня элемент управления "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();

        }

    }

Заранее спасибо.


person seba123neo    schedule 29.12.2010    source источник


Ответы (3)


Единственный способ, который я могу придумать, - это использовать 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);
 }
}

Вместо того, чтобы создавать новое представление специально для этого, я думаю, вы бы использовали любое представление, к которому хотите применить это. Я надеюсь, что это то, к чему вы стремились, и что это помогает.

person Matt    schedule 29.12.2010
comment
УРА! удачи в кодировании :0) - person Matt; 30.12.2010

Я думаю, вы должны использовать всплывающее меню вместо контекстного меню. См. документацию 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 вашей кнопки и передайте свою кнопку.

person Šimon Vyhnis    schedule 05.06.2020

Без добавления какого-либо OnClickListener в код вы можете сделать это только в xml. Просто перейдите в свой ImageView и добавьте:

android:onClick="openContextMenu"

Вот пример.

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