Android OnSingleTapConfiged还为单击3点操作栏按钮调用,这会造成很多麻烦

Android OnSingleTapConfiged还为单击3点操作栏按钮调用,这会造成很多麻烦,android,events,android-actionbar,conflict,Android,Events,Android Actionbar,Conflict,在我的应用程序中,我显示\隐藏系统ui,如导航\状态栏。 我通过使用“OnSingleTapConfiged”事件并在隐藏\显示以下ui系统之间切换来完成此操作: @Override public boolean onSingleTapConfirmed(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (sysBarsAreVis

在我的应用程序中,我显示\隐藏系统ui,如导航\状态栏。 我通过使用“OnSingleTapConfiged”事件并在隐藏\显示以下ui系统之间切换来完成此操作:

@Override
public boolean onSingleTapConfirmed(MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            if (sysBarsAreVisible) {
                hideSystemUI();
            } else {
                showSystemUI();
            }
            break;
    }

    return true;
}
这个很好用。导航栏和状态栏按照我的预期显示和隐藏。 问题是,当我尝试按下动作栏中的3dot按钮(…)时,单次点击事件会调用并隐藏动作栏和浮动菜单,它们会立即显示并消失

你知道我该怎么解决吗?如何识别按下了3点按钮并跳过“全部显示\隐藏”操作


谢谢

我通过计算触摸坐标是在视图范围内还是在视图范围外解决了类似的问题。

根据Adam Fręśko答案。。 我在代码中添加了以下行:

@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
    Log.d(TAG, "raw Y: " + event.getRawY());
    Log.d(TAG, "bar height: " + actionBar.getHeight());
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            if (event.getRawY() > actionBar.getHeight() * 1.2) {

                if (sysBarsAreVisible) {
                    hideSystemUI();
                } else {
                    showSystemUI();
                }
                return true;
            }
    }

    return false;
}
我将原始Y坐标与操作栏的高度进行比较,以了解用户的操作是否超出了操作栏的边界。 我还在1.2中增加了动作条的高度,以扩展手指粗大者的界限:-)


很好用,谢谢

更好的方法是在动作向上时使用事件,因为动作向下可以被动作栏使用,从而使动作向上不会在您的侦听器中触发。

我尝试过,如果您想切换状态+导航栏,则动作向下的工作会更加顺畅。动作向上时的交互与动作向下时的交互似乎很难实现。这是因为您的视图没有任何其他事件(可能),在这种情况下,您将看到swapingbar动画,但不会看到onclick动作。希望你能理解