状态更改后的Android底表

Ada*_*atz 1 android bottom-sheet

我有一个带有底页的屏幕,但是要使过渡动画在活动之间起作用,我需要在用户继续按下时折叠底页。我试过了

@Override
public void onBackPressed(){
    if (mBottomSheetBehavior.getState()==BottomSheetBehavior.STATE_COLLAPSED){
        super.onBackPressed();
    }else{
        mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
        super.onBackPressed();
    }
    mShowingBack = false;
}
Run Code Online (Sandbox Code Playgroud)

但是,由于活动返回,而底表仅下降了一半,因此无法正常工作。

ami*_*-sr 8

BottomSheetBehavior.STATE_COLLAPSED不会隐藏所有BottomSheet,它只是将视图的高度设置为您使用xml中的setPeekHeight()或behavior_peekHeight设置的任何值:但是将其放在一边...您应该在内部调用super.onBackPressed()当BottomSheet的状态为STATE_COLLAPSED时,返回一个BottomSheetBehaviorCallback,如下所示:

BottomSheetBehavior behavior = BottomSheetBehavior.from(mBottomSheetBehavior);  
behavior.setBottomSheetCallback(new BottomSheetCallback() {  
   @Override  
   public void onStateChanged(@NonNull View bottomSheet, int newState) {  
     if (newState == BottomSheetBehavior.STATE_COLLAPSED && mIsCollapsedFromBackPress){
        mIsCollapsedFromBackPress = false;
        super.onBackPressed();
     }
   }  

  @Override  
  public void onSlide(@NonNull View bottomSheet, float slideOffset) {  
     // React to dragging events  
  }  
});
Run Code Online (Sandbox Code Playgroud)

并且您的backPressed()方法应如下所示:

@Override
public void onBackPressed(){
    mIsCollapsedFromBackPress = true;
    mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
Run Code Online (Sandbox Code Playgroud)

  • 行为.setBottomSheetCallback(); 被亵渎了 (2认同)

Var*_*Raj 5

behavior.setBottomSheetCallback(); 
Run Code Online (Sandbox Code Playgroud)

现已弃用。就用这个吧。

BottomSheetBehavior.from(nearbyBottomSheet).addBottomSheetCallback(object :BottomSheetBehavior.BottomSheetCallback() {
        override fun onStateChanged(bottomSheet: View, newState: Int) {

        }

        override fun onSlide(bottomSheet: View, slideOffset: Float) {
                
        }
})
Run Code Online (Sandbox Code Playgroud)