2

由於我的信譽低,我無法評論。所以我擴展了這個問題: Disabling User dragging on BottomSheet禁用底部紙片拖動

由Ray W提供的解決方案工作,但現在它通過在父視圖(CoordinatorLayout)上滑動和拖動來擴展。

Image

中的圖像,如果我拖上 「不需要拖拽區」,BottomSheet向上滑動。如何過濾或停止不需要的視圖上的觸摸事件?

回答

-1

變化從Ray W solution的onInterceptTouchEvent函數的返回值是:

@Override 
public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { 
    return super.onInterceptTouchEvent(parent, child, event) && mAllowUserDragging; 
} 

還有一件事,如果你有BottomSheetLayout一個ListView,然後滾動ListView中的項目將改變bottomSheetBehavior狀態「STATE_DRAGGING」從「 STATE_EXPANDED」。 示例代碼塊:

@Override 
    public void onBackPressed() {  
     if(isBottomViewOpen){ // set this bool in behavior callback 
      behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
     }else { 
      super.onBackPressed(); 
     } 
    } 
+0

在問候你的ListView評論。這有什麼解決辦法?我在底部清單中有一個回收站,我遇到了同樣的問題。如果我試圖在回收站查看以外的其他地方拖動底部紙張,底部紙張仍會按預期展開。只有拖動回收站查看底部表格纔會開始拖動。 – Zac

+0

我最終使用了這個:https://github.com/umano/AndroidSlidingUpPanel Bottomsheet中還有很多其他問題,例如:不在BottomSheet中刷新ListView。所以我退出並改用SlidingUpPanel。 – Fahim

-4

看看這個:

mBottomSheetBehavior1.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 
      @Override 
      public void onStateChanged(@NonNull View bottomSheet, int newState) { 
       if (newState == BottomSheetBehavior.STATE_DRAGGING) { 
        mBottomSheetBehavior1.setState(BottomSheetBehavior.STATE_EXPANDED); 
       } 
      } 

      @Override 
      public void onSlide(@NonNull View bottomSheet, float slideOffset) { 
       Log.i("BottomSheetCallback", "slideOffset: " + slideOffset); 
      } 
     }); 

關閉BottomSheet時onBackPress:

@Override 
    public void onBackPressed() { 
     if(mBottomSheetBehavior1.getState() != 4) { 
      mBottomSheetBehavior1.setState(BottomSheetBehavior.STATE_COLLAPSED); 
     } 
     else { 
      super.onBackPressed(); 
     } 
    }