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?
À 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();
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()
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:
- En tant que décor d'application de niveau supérieur ou mise en page chrome
- 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.
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();
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
}
.....
}