2017-02-17 22 views
0

我有一個底部表單的屏幕,但是用於在活動之間工作的過渡動畫我需要底部表單在用戶重新按下時摺疊。我試過這個狀態發生變化後的Android底部表

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

但是,這不起作用,因爲活動回落,而bottomomsheet只是一半下降。

回答

1

BottomSheetBehavior.STATE_COLLAPSED並不隱藏所有的BottomSheet,它只是將視圖的高度設置爲您在xml中使用setPeekHeight()或behavior_peekHeight設置的任何值:)但將其放在一邊......您應該調用super。 onBackPressed()一BottomSheetBehaviorCallback內時BottomSheet的狀態STATE_COLLAPSED,像這樣:

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 
    } 
}); 

和你backPressed()方法應該是這樣的:

@Override 
public void onBackPressed(){ 
    mIsCollapsedFromBackPress = true; 
    mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
} 
+0

的問題是,是,底部由於其他原因,工作表崩潰一個不斷變化的活動,我不希望活動每次都改變底部工作表被修改 –

+0

那麼,在這種情況下,也許你可以使用一個本地布爾類似...「mIsCollapsedOnBackPressed」,並使其在onBackPressed中成爲true,然後使它在BottomSheetBehavior內「false」,如果......這是我能想到的最快解決方案。 –

+0

我剛剛編輯了答案,我認爲它應該適用於你的情況:) –

相關問題