我正试图在用户点击活动时切换显示/隐藏操作栏,所以我在活动中实现了这样的功能:
@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;
}
然而,问题是当点击活动时,操作栏会被隐藏,但会立即再次显示。我添加了日志记录,似乎这个方法被触发了两次,为什么会这样?
答案 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;
}