Je ne peux pas cacher mon FloatingActionButton
. Voici mon code:
XML:
<CoordinatorLayout>
<AppBarLayout Android:id="@+id/appbar">
<CollapsingToolbarLayout>
<ImageView/>
<Android.support.v7.widget.Toolbar />
</CollapsingToolbarLayout>
</AppBarLayout>
<NestedScrollView />
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"/>
</CoordinatorLayout>
Et j'appelle:
fab.clearAnimation();
fab.setVisibility(View.GONE);
J'essaie de cacher le FAB, mais il semble que setVisibility
+ clearAnimation
ne fonctionne pas si le FAB est dans un CoordinatorLayout
.
Même si j'appelle fab.clearAnimation
, l'animation est toujours déclenchée. Quelqu'un peut-il m'aider?
Si votre problème est l'animation, vous pouvez essayer d'invalider le FAB Behavior
. Quant à la visibilité, vous devez annuler l'ancre que vous avez définie dans votre mise en page:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(null); //should disable default animations
p.setAnchorId(View.NO_ID); //should let you set visibility
fab.setLayoutParams(p);
fab.setVisibility(View.GONE); // View.INVISIBLE might also be worth trying
//to bring things back to normal state
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(new FloatingActionButton.Behavior());
p.setAnchorId(R.id.appbar);
fab.setLayoutParams(p);
Utilisez les méthodes d'affichage et de masquage pour afficher et masquer le bouton d'action flottante
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
// To show the Floating Action Button
fab.show();
// To hide the Floating Action Button
fab.hide();
Pour FloatingActionButton
la méthode setVisibility()
vous donnera une erreur lors de la construction avec la dernière Gradle 6.x
et build-tool 28.x.x
et n'est plus encouragé. tilisez plutôt:
fab.hide() // fab.setVisibility(View.GONE)
fab.show() // fab.setVisibility(View.VISIBLE)
Remarque: Testé avec succès sur
Android Studio 3.4.1
,Gradle 6.0
etbuild-tool 28.0.1
J'ai rencontré exactement le même problème. Il semblerait que l'équipe de Google Android ne veut pas que vous ayez le contrôle de la visibilité lorsque le FloatingActionButton est ancré à un AppBarLayout, comme indiqué dans ce numéro - FloatingActionButton ignore la visibilité de la vue
Il semble qu'un correctif viable enveloppe le FAB dans un FrameLayout et définisse la visibilité sur l'encapsuleur à la place, comme ceci:
<Android.support.design.widget.FrameLayout
Android:id="@+id/fab_container"
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:visibility="invisible">
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/fab_icon"/>
</Android.support.design.widget.FrameLayout>
Vous pouvez cependant souhaiter déterminer s'il s'agit du comportement idéal. Les partisans de Google recommandent que le FAB soit visible dès que l'écran est créé. Si vous le cachez plus longtemps que nécessaire pour l'animer, envisagez plutôt d'afficher un état désactivé.
FloatingActionButton layers = (FloatingActionButton) findViewById(R.id.layers);
layers.hide();
Cela fonctionne pour moi, setVisibility
ne fonctionne pas pour FloatingActionButton
car il appartient à une autre viewGroup
qui n'a pas la méthode setVisibility
.
vous pouvez le désactiver et le rendre semi-transparent comme celui-ci
fab.setEnabled(false);
fab.setClickable(false);
fab.setAlpha(0.3f);