SwipeBackLayout向右滑動關閉當前Activity,SlidingMenu向右滑動則是打開menu部分。在同一個Activity中,當SlidingMenu處於打開狀態時,此時向右滑動,事件會被SwipeBackLayout優先處理,導致屏幕上一大部分是menu,一小部分是Activity內容的時候居然是直接關閉當前Activity,顯然,這不是用戶所願意看到的(正確操作場景為:當SlidingMenu處於打開狀態,右滑先是相應SlidingMenu,慢慢關閉,然后再右滑時才是響應SwipeBackLayout關閉當前Activity,若SlidingMenu處於關閉狀態,則直接響應SwipeBackLayout)。
考慮到SlidingMenu和SwipeBackLayout都各自有着自己的狀態,且為了盡量耦合,可以進行如下處理(直接在當前Activity中重寫dispatchTouchEvent,依據SlidingMenu狀態設置SwipeBackLayout的可用狀態):
1 @Override 2 public boolean dispatchTouchEvent(MotionEvent ev) { 3 if (menu.isMenuShowing()) { 4 if (mSwipeBackLayout.getEnableGesture()) { 5 mSwipeBackLayout.setEnableGesture(false); 6 } 7 } else { 8 if (!mSwipeBackLayout.getEnableGesture()) { 9 mSwipeBackLayout.setEnableGesture(true); 10 } 11 } 12 return super.dispatchTouchEvent(ev); 13 }