Android ActionBar опций событие длинного нажатия - PullRequest
4 голосов
/ 13 февраля 2012

Android Может кто-нибудь знать о параметрах панели действий при длинном щелчке, я хочу показать текст в LongClick в пункте меню панели действий, как подсказка при длительном нажатии actionBar при длительном нажатии

Ответы [ 5 ]

10 голосов
/ 03 апреля 2014

Хотите захватить долгое нажатие на пункт меню на панели действий? Что касается меня, то, найдя 2,3 часа, я нашел это решение. Это отлично работает для меня.

      @Override
     public boolean onCreateOptionsMenu(final Menu menu) {



    getMenuInflater().inflate(R.menu.menu, menu);

    new Handler().post(new Runnable() {
        @Override
        public void run() {
            final View v = findViewById(R.id.action_settings);

            if (v != null) {
                v.setOnLongClickListener(new CustomLongOnClickListener());
            }
        }
    });

    return true;
}
5 голосов
/ 10 августа 2015

Для меня следующий подход прекрасно работает для новых версий Android - я протестировал его на Android 4.2 и Android 5.0.1.

Идея состоит в том, чтобы заменить представление значка действия на пользовательское представление.Здесь я должен обработать один щелчок, и я могу справиться с длинным щелчком.

Если я хочу, чтобы внешний вид был точно таким же, как обычные значки на панели действий, работает следующее.

Во-первых,создайте макет, содержащий только ImageButton с вашим значком.

<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myButton"
    style="?android:attr/actionButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="@layout/text_view_initializing"
    android:src="@drawable/ic_action_plus" />

Затем поместите этот ImageButton в панель действий и присоедините к нему слушателей.

MenuItem myItem = menu.findItem(R.id.my_action);
myItem.setActionView(R.layout.my_image_button);
myItem.getActionView().setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(final View v) {
        // here, I have to put the stuff that normally goes in onOptionItemSelected 
    }
});
myItem.getActionView().setOnLongClickListener(new OnLongClickListener() {
    @Override
    public boolean onLongClick(final View v) {
        // here, I put the long click stuff
    }
});

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

5 голосов
/ 12 августа 2012

user1206890, вам не нужно слушать событие длинного щелчка.Если вы хотите показать подсказку действия, будет достаточно установить заголовок в меню добавить.Проверено на 2.3 и 4.0.

4 голосов
/ 13 февраля 2012

Если вы создаете свой собственный вид действия через android:actionLayout, вы можете настроить прослушиватели на свои собственные виджеты для событий длинных нажатий. У вас нет доступа к виджетам на панели действий, которые вы не создаете сами.

0 голосов
/ 08 апреля 2016

Я думаю, "findViewById" - самый простой способ найти.
Просто сделай

View action_example = findViewById(R.id.action_example);
        if(action_example!=null)action_example.setOnLongClickListener(
                new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        Toast.makeText(MainActivity.this, "action_example", Toast.LENGTH_SHORT).show();
                        return true;
                    }
                }
        );
...