Mise à JOUR: Depuis les versions prises en charge de 23.1.1+ la question n'est plus là, pas besoin d'utiliser l'auditeur et de désactiver le balayage actualisation de la mise en page, il fonctionnera comme il se doit (lien).
Mettre En Œuvre AppBarLayout.OnOffsetChangedListener d'écoute sur votre AppBarLayout
Et de vérifier si offset est 0, ce qui signifie la barre d'outils est entièrement développé.
@Overridepublicvoid onOffsetChanged(AppBarLayout appBarLayout,int offset){if(offset ==0){//Fully expanded}else{//Not fully expanded or collapsed}}
pour plus d'expliquer, lors de l'effondrement de la barre d'outils est complètement développé, la valeur de décalage est égal à zéro (offset == 0)
J'ai changé la condition if pour verticalOffset < -710 alors le problème est résolu. pas très élégant, mais il fonctionne
Pour détecter si elle est entièrement effondré vérifier si les Mathématiques.abs(offset) == appBarLayout
Comme @Atieh dit ce n'est PAS la bonne réponse, Upvotes sont missleading, Peut-être que les utilisateurs devraient essayer d'abord, puis upvote !
Je vais re-tester cette et de les corriger si il y a une erreur.
Et comment en serait-il lorsque Parchemin de retours, mais seulement la Barre d'outils est visible et fixe en haut?Comme ceci:stackoverflow.com/questions/46981038/... @Marko
publicclassMyAppBarLayoutextendsAppBarLayoutimplementsAppBarLayout.OnOffsetChangedListener{privateState state;privateOnStateChangeListener onStateChangeListener;publicMyAppBarLayout(Context context){super(context);}publicMyAppBarLayout(Context context,AttributeSet attrs){super(context, attrs);}@Overrideprotectedvoid onAttachedToWindow(){super.onAttachedToWindow();if(!(getLayoutParams()instanceofCoordinatorLayout.LayoutParams)||!(getParent()instanceofCoordinatorLayout)){thrownewIllegalStateException("MyAppBarLayout must be a direct child of CoordinatorLayout.");}
addOnOffsetChangedListener(this);}@Overridepublicvoid onOffsetChanged(AppBarLayout appBarLayout,int verticalOffset){if(verticalOffset ==0){if(onStateChangeListener !=null&& state !=State.EXPANDED){
onStateChangeListener.onStateChange(State.EXPANDED);}
state =State.EXPANDED;}elseif(Math.abs(verticalOffset)>= appBarLayout.getTotalScrollRange()){if(onStateChangeListener !=null&& state !=State.COLLAPSED){
onStateChangeListener.onStateChange(State.COLLAPSED);}
state =State.COLLAPSED;}else{if(onStateChangeListener !=null&& state !=State.IDLE){
onStateChangeListener.onStateChange(State.IDLE);}
state =State.IDLE;}}publicvoid setOnStateChangeListener(OnStateChangeListener listener){this.onStateChangeListener = listener;}publicinterfaceOnStateChangeListener{void onStateChange(State toolbarChange);}publicenumState{
COLLAPSED,
EXPANDED,
IDLE
}}
Vous avez raison, j'ai ajouté le code qui est pertinent pour la question.
Cela fonctionne avec élégance @EdyBolos merci une tonne pour le partage. Impeccable!
appBarLayout.addOnOffsetChangedListener(newAppBarLayout.OnOffsetChangedListener(){@Overridepublicvoid onOffsetChanged(AppBarLayout appBarLayout,int verticalOffset){if(Math.abs(verticalOffset)-appBarLayout.getTotalScrollRange()==0){// on Collapse}else{// on expand}}});
appBarLayout.totalScrollRange n'est pas toujours égale à verticalOffset dans certains cas, il vaut mieux vérifier verticalOffset plus grande que totoalScrollRange
Mise à JOUR: Depuis les versions prises en charge de 23.1.1+ la question n'est plus là, pas besoin d'utiliser l'auditeur et de désactiver le balayage actualisation de la mise en page, il fonctionnera comme il se doit (lien).
Mettre En Œuvre AppBarLayout.OnOffsetChangedListener d'écoute sur votre AppBarLayout
Et de vérifier si offset est 0, ce qui signifie la barre d'outils est entièrement développé.
verticalOffset < -710
alors le problème est résolu. pas très élégant, mais il fonctionneComme Marko dit, cela peut être réalisé à l'aide de votre propre mise en œuvre d'un OnOffsetChangedListener.
Prendre un coup d'oeil sur ce github gist
appBarLayout.totalScrollRange n'est pas toujours égale à verticalOffset dans certains cas, il vaut mieux vérifier verticalOffset plus grande que totoalScrollRange