Параметры Android ActionBar с длинным кликом

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


person user1206890    schedule 13.02.2012    source источник


Ответы (6)


Вы хотите зафиксировать долгое нажатие на пункт меню на панели действий? Что касается меня, найдя 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;
}
person YeeKhin    schedule 03.04.2014
comment
но в первый раз он работает нормально. Второй раз, когда мы нажимаем на пункт меню, он показывает то же пустое тост-сообщение - person Pinki; 01.07.2014
comment
@ ЙиКхин . Большое спасибо . - person ; 04.10.2015
comment
но findviewbyid всегда возвращает ноль, почему? - person hyyou2010; 26.07.2017

Для меня следующий подход отлично работает для более новых версий 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
    }
});

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

person Jörg Eisfeld    schedule 10.08.2015

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

person Yura Shinkarev    schedule 12.08.2012

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

person CommonsWare    schedule 13.02.2012
comment
Затем поместите Toast туда, куда хотите, в соответствии с stackoverflow.com/a/21026866/630833, который принимает размер Toast в внимание, что было полезно. - person jayeffkay; 06.11.2014

Я думаю, что "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;
                    }
                }
        );
person pupupu    schedule 08.04.2016

Это код функции, которая работает со мной благодаря тому, что @YeeKhin изменил «main» на имя вашего меню и «action_refresh» на имя вашего действия и «Activity» на имя вашей деятельности.

public boolean onCreateOptionsMenu(Menu menu) {

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

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

                if (v != null) {
                    v.setOnLongClickListener(new View.OnLongClickListener() {
                        @Override
                        public boolean onLongClick(View v) {
                            Toast.makeText(Activity.this,"Long Press!!",Toast.LENGTH_LONG).show();
                            return false;
                        }
                    });
                }
            }
        });

        return true;
    }
person mos.saudi    schedule 29.01.2020