web-dev-qa-db-fra.com

Etat caché de la feuille inférieure

J'essaie de définir l'état caché pour BottomSheet, mais cela ne fonctionne pas. Quel est le problème?

 bottomBar = BottomSheetBehavior.from(findViewById(R.id.bottom_bar));
 bottomBar.setState(BottomSheetBehavior.STATE_HIDDEN);
7
Ник

N'oubliez pas d'ajouter ceci en masquant la feuille du bas au début de l'activité/du fragment

bottomSheetBehavior =BottomSheetBehavior.from(bottom_sheet_view_here);
bottomSheetBehavior.setHideable(true);//Important to add
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
23
zohaib khaliq
mBottomSheetBehaviour.setPeekHeight(0);

utilisez ceci et il se cachera.

4
Akshay Shah

essayez ce qui suit:

LinearLayout bottomSheetViewgroup  
= (LinearLayout) findViewById(R.id.bottom_sheet);

BottomSheetBehavior bottomSheetBehavior =  
BottomSheetBehavior.from(bottomSheetViewgroup);

puis utiliser 

bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
3

Assurez-vous de ne pas le faire trop tôt dans le cycle de vie de votre activité. Si vous devez le faire dans onCreate ou quelque chose de similaire, essayez de le placer dans un Runnable que vous publiez dans une vue, comme suit:

getWindow().getDecorView().post(new Runnable() {
    @Override
    public void run() {
        bottomBar = BottomSheetBehavior.from(findViewById(R.id.bottom_bar));
        bottomBar.setState(BottomSheetBehavior.STATE_HIDDEN);
    }
 });

Ce n'est pas la solution la plus propre, mais c'est parfois inévitable.

1
Dmitry Brant

Si vous utilisez quelque chose comme une activité à onglets, vous pouvez masquer votre incrustation de feuille dans votre fragment.

Je pense que cela est possible, car la vue fragmentée est créée après la vue activité.

class "activity"
   public void hideBottomSheet(){ 
      sheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
   }

class "fragment"
   onCreateView()
      ((YourActivity.class)getActivity()).hideBottomSheet();
0
EmreArslan

Essayez BottomSheetBehaviour.STATE_COLLAPSED

bottomBar = BottomSheetBehavior.from(findViewById(R.id.bottom_bar));
bottomBar.setState(BottomSheetBehavior.STATE_COLLAPSED);
0
Raymond de la Croix

Une autre façon - Ainsi, vous n’avez pas besoin de Fragments:

boolean init = true;


layoutBottomSheet.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
        @Override
        public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
            if(init)hideBottomSheet();
            init=false;
        }
    });
0
EmreArslan