操作栏已隐藏,并在此后立即显示

时间:2015-05-08 06:30:19

标签: android android-actionbar

我正试图在用户点击活动时切换显示/隐藏操作栏,所以我在活动中实现了这样的功能:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Log.d("ACTION BAR", "triggered");

    super.dispatchTouchEvent(ev);

    ActionBar actionBar = getSupportActionBar();
    actionBar.hide();

    if (actionBar.isShowing()) {
        actionBar.hide();
    } else {
        actionBar.show();
    }

    return true;
}

然而,问题是当点击活动时,操作栏会被隐藏,但会立即再次显示。我添加了日志记录,似乎这个方法被触发了两次,为什么会这样?

1 个答案:

答案 0 :(得分:4)

我认为dispatchTouchEvent可能会在触摸和向上操作时被调用两次,因此请在显示操作栏之前使用一个布尔标志并检查此标志值:

private boolean isManuallyHideShownActionBar;

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    super.dispatchTouchEvent(ev);

    ActionBar actionBar = getSupportActionBar();

    if(!isManuallyHideShownActionBar){
        if (actionBar.isShowing()) {
            actionBar.hide();
        } else {
            actionBar.show();
        }
        isManuallyHideShownActionBar = true;
    }else{
        isManuallyHideShownActionBar = false;
    }

    return true;
}