9

In android document, it mentions supporting the "hover" event since 4.0 (ie. API level 14 and up). But somehow, it doesn't work. Even I tried out the sample code in ApiDemo, which is from Android Sample, it didn't work. My current device is Android 4.0.4. Should I upgrade it to 4.2.2?

Sample code is something as below. Did you have a solution to it? Thanks a lot.

Code:


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;
        }
    });

Josh ZHOU
  • 91
  • 1
  • 1
  • 2

5 Answers5

10

Hovering requires support from the hardware. The only thing likely to support it is a stylus. It won't work with just your finger.

Gabe Sechan
  • 90,003
  • 9
  • 87
  • 127
  • 2
    Thanks. Will it work with mouse? e.g. a bluetooth mouse compatible with Android device? – Josh ZHOU Jul 28 '13 at 15:32
  • Not sure, I've never tried it. I think it might (a non-clicked mouse as a hover makes sense), but I can't swear it will. – Gabe Sechan Jul 28 '13 at 15:36
  • As an update to this- some devices will now be able to detect a single finger hovering. But really only the higher end devices, like the Note. You can't rely on it. – Gabe Sechan Dec 05 '13 at 21:48
  • I tried the code on android emulator, it didn't work on that using mouse. Have someone else tried and got it working ? – Amit Hooda Jan 03 '17 at 05:12
1

try using OnFocusChangeListener(). PS worked for me

Bilal Ahmed
  • 258
  • 3
  • 10
0

I suggest to Turn on 'Accessibility' and 'Explore by touch' feature in settings. When these features are off, the hover action will be treated as touch actions.

BMSN
  • 1
  • 1
0

setOnTouchListener is also an option. Here is a kotlin example:

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

here (binding.ratingBar) is my view reference. I used view binding.

Touhid
  • 1,556
  • 18
  • 18
0

Try to debug on a Chromebook, Alternatively, If you do not have one like me, Install fydeOS over a VMware station. Enable debugging mode on fydeOS so you can debug your app using android studio. If you do everything right, You will see the fydeOS device on the android studio device manager list.

Note: fydeOS has separated image for WMware and supported hardwares. see here

enter image description here

ucMedia
  • 4,105
  • 4
  • 38
  • 46