onHoverListener не работает в Android

В документе Android упоминается поддержка события «зависание» с версии 4.0 (т.е. уровень API 14 и выше). Но почему-то не работает. Даже я попробовал пример кода в ApiDemo, который взят из Android Sample, он не сработал. Мое текущее устройство — Android 4.0.4. Должен ли я обновить его до 4.2.2?

Пример кода выглядит примерно так, как показано ниже. У вас есть решение? Большое спасибо.

Код:


View container = findViewById(R.id.container);
    container.setOnHoverListener(new View.OnHoverListener() {
        @Override
        public boolean onHover(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_HOVER_ENTER:
                    mMessageTextView.setText(Hover.this.getResources().getString(
                            R.string.hover_message_entered_at,
                            event.getX(), event.getY()));
                    break;
                case MotionEvent.ACTION_HOVER_MOVE:
                    mMessageTextView.setText(Hover.this.getResources().getString(
                            R.string.hover_message_moved_at,
                            event.getX(), event.getY()));
                    break;
                case MotionEvent.ACTION_HOVER_EXIT:
                    mMessageTextView.setText(Hover.this.getResources().getString(
                            R.string.hover_message_exited_at,
                            event.getX(), event.getY()));
                    break;
            }
            return false;
        }
    });


person Josh ZHOU    schedule 28.07.2013    source источник


Ответы (4)


Наведение требует поддержки со стороны оборудования. Единственное, что, вероятно, поддерживает это, это стилус. Просто пальцем не получится.

person Gabe Sechan    schedule 28.07.2013
comment
Спасибо. Будет ли он работать с мышью? например Bluetooth-мышь, совместимая с устройством Android? - person Josh ZHOU; 28.07.2013
comment
Не уверен, я никогда не пробовал. Я думаю, что это возможно (не нажатая мышь как наведение имеет смысл), но я не могу поклясться, что это произойдет. - person Gabe Sechan; 28.07.2013
comment
В качестве обновления к этому некоторые устройства теперь смогут обнаруживать зависание одного пальца. Но на самом деле только устройства более высокого класса, такие как Note. Вы не можете полагаться на это. - person Gabe Sechan; 06.12.2013
comment
Я попробовал код на эмуляторе Android, с помощью мыши он не работал. Кто-то еще пробовал и у него получилось? - person Amit Hooda; 03.01.2017

попробуйте использовать OnFocusChangeListener(). PS у меня сработало

person Bilal Ahmed    schedule 08.03.2016

Я предлагаю включить «Специальные возможности» и «Исследовать на ощупь» в настройках. Когда эти функции отключены, действие наведения будет рассматриваться как действие касания.

person BMSN    schedule 08.10.2013

setOnTouchListener также является опцией. Вот пример котлина:

    binding.ratingBar.setOnTouchListener { v, event ->
        println("touch......")
        false
    }

здесь (binding.ratingBar) ссылка на мой вид. Я использовал привязку представления.

person Touhid    schedule 25.07.2021