web-dev-qa-db-fra.com

Déplacer le bouton d'action flottant de haut en bas pour éviter d'être bloqué par un snack-bar

J'utilise cette bibliothèque pour implémenter une barre d'action flottante et je n'arrive pas à trouver un moyen de déplacer le bouton lorsqu'une barre de collation apparaît à l'écran. Est-ce même possible avec cette bibliothèque?

33
naja

À tous ceux qui cherchent une réponse à l'avenir ..

La disposition du coordinateur utilisée comme disposition parent du bouton d'action flottante gérera automatiquement l'effet d'animation pour vous.

Le bouton d'action flottant a un comportement par défaut qui détecte les vues Snackbar ajoutées et anime le bouton au-dessus de la hauteur de la Snackbar en conséquence.

Comportement du bouton d'action flottante

<Android.support.design.widget.CoordinatorLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/clayout">
<Android.support.design.widget.FloatingActionButton
    Android:id="@+id/fab_btn"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="bottom|right"
    Android:layout_marginBottom="16dp"
    Android:layout_marginRight="16dp"
    Android:src="@drawable/filter_icon"
    app:rippleColor="@color/colorGray"
    app:fabSize="normal"
    app:borderWidth="0dp"/>
</Android.support.design.widget.CoordinatorLayout>

Ensuite, notre code SnackBar utiliserait Coordinatorlayout [ici clayout] comme parentlayout comme ci-dessous:

Snackbar.make(clayout, "Click on row to know more details", Snackbar.LENGTH_LONG)
                    .setAction("OK", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                        }
                    }).show();
42
PunitD

Essayez d'utiliserAndroid.support.design.widget.FloatingActionButton et CoordinatorLayout.

Et puis essayez ceci:

fabView = findViewById(R.id.floating_action_button_id);
Snackbar.make(fabView, "Hi", Snackbar.LENGTH_LONG).show()
9
Cody

Vous pouvez passer à Android.support.design.widget.FloatingActionButton et utiliser CoordinatorLayout pour spécifier les comportements de vos vues.

CoordinatorLayout est un FrameLayout super puissant.

CoordinatorLayout est destiné à deux cas d'utilisation principaux:

  1. En tant que décor d'application de niveau supérieur ou mise en page chrome
  2. En tant que conteneur pour une interaction spécifique avec une ou plusieurs vues enfant

En spécifiant les comportements pour les vues enfant d'un CoordinatorLayout, vous pouvez fournir de nombreuses interactions différentes au sein d'un seul parent et ces vues peuvent également interagir les unes avec les autres. Les classes de vue peuvent spécifier un comportement par défaut lorsqu'elles sont utilisées en tant qu'enfant d'un CoordinatorLayout à l'aide de l'annotation DefaultBehavior.

Les comportements peuvent être utilisés pour implémenter une variété d'interactions et des modifications de mise en page supplémentaires allant des tiroirs et panneaux coulissants aux éléments et boutons pouvant être glissés et collés à d'autres éléments lorsqu'ils se déplacent et s'animent.

Les enfants d'un coordinateur Layout peuvent avoir une ancre. Cet identifiant de vue doit correspondre à un descendant arbitraire de CoordinatorLayout, mais il peut ne pas être l'enfant ancré lui-même ou un descendant de l'enfant ancré. Cela peut être utilisé pour placer des vues flottantes par rapport à d'autres volets de contenu arbitraires.

7
Ruslan Ulanov

Vous pouvez utiliser pour définir parentLayout - comme FAB,

Snackbar.make(parentLayout, R.string.snackbar_text,Snackbar.LENGTH_LONG).setAction(R.string.snackbar_action, myOnClickListener).show();
2
Sathish Kumar

Kotlin:

class CustomBehavior : CoordinatorLayout.Behavior<FloatingActionButton> {   

....

    override fun onAttachedToLayoutParams(params: CoordinatorLayout.LayoutParams) {
        super.onAttachedToLayoutParams(params)

        //set dodgeInsetEdges to BOTTOM so that we dodge any Snackbars
        params.dodgeInsetEdges = Gravity.BOTTOM
    }

.....

}
1
Zuev Roman