在Android中,onHoverListener不起作用

9
在Android文档中提到自4.0(即API级别14及以上)支持“hover”事件。但是,它似乎不起作用。即使我尝试了来自Android示例的ApiDemo中的示例代码,它也没有起作用。 我的当前设备是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;
        }
    });

5个回答

10

悬停需要硬件支持。唯一可能支持它的是触控笔。仅用手指无法操作。


2
谢谢。它能用鼠标吗?例如,与 Android 设备兼容的蓝牙鼠标? - Josh ZHOU
不确定,我从未尝试过。我认为这可能会(非点击鼠标作为悬停是有道理的),但我不能保证它会成功。 - Gabe Sechan
作为更新,现在一些设备将能够检测单个手指悬停。但实际上只有高端设备,比如Note才能做到。你不能依赖它。 - Gabe Sechan
我在安卓模拟器上尝试了这段代码,但是使用鼠标时它无法工作。有其他人尝试过并使其正常运行吗? - Amit Hooda

1

尝试使用OnFocusChangeListener()。PS对我有用。


0

我建议在设置中打开“可访问性”和“触摸探索”功能。 当这些特性关闭时,悬停操作将被视为触摸操作。


0

尝试在Chromebook上进行调试,或者像我一样没有Chromebook的话,在VMware工作站上安装fydeOS。在fydeOS上启用调试模式,这样您就可以使用Android Studio调试应用程序。如果您做得正确,您将在Android Studio设备管理器列表中看到fydeOS设备。

注意:fydeOS有适用于VMware的镜像和支持的硬件。请参见此处

enter image description here


0

setOnTouchListener也是一个选择。这里有一个Kotlin示例:

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

这里(binding.ratingBar)是我的视图引用。我使用了视图绑定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接