web-dev-qa-db-fra.com

FloatingActionButton setVisibility () ne fonctionne pas

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?

17
user2331095

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);
15
natario

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();
39
mstoic

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 et build-tool 28.0.1

13
Rahul Raina

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é.

6
AlgoRyan
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.

2
Satendra Behre

vous pouvez le désactiver et le rendre semi-transparent comme celui-ci

fab.setEnabled(false);
fab.setClickable(false);
fab.setAlpha(0.3f);
1
Dan Alboteanu