Après le nouveau snack-bar Android, j'essaie de le positionner sur une coordonnée y spécifique. Cela ne semble même pas possible.
J'ai essayé d'obtenir le point de vue du parent du snack-bar, mais il n'y a rien à faire au parent pour que celui-ci en définisse la position.
mSnackBar.getView().getParent();
Lors de la fouille dans la classe réelle, il existe une instance de mView et mParent qui est privée et qui ne peut pas être atteinte de toute façon.
https://developer.Android.com/reference/Android/support/design/widget/Snackbar.html
Il est possible de définir l'emplacement d'affichage de la barre Snackbar en plaçant un Android.support.design.widget.CoordinatorLayout
dans votre structure d'activité existante.
Par exemple, supposons que votre présentation existante soit une RelativeLayout
, vous pouvez ajouter une CoordinatorLayout
comme suit:
<Android.support.design.widget.CoordinatorLayout
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:id="@+id/myCoordinatorLayout"
Android:layout_alignParentTop="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true">
</Android.support.design.widget.CoordinatorLayout>
Ensuite, assurez-vous de passer la CoordinatorLayout
comme premier argument de la commande Snackbar.make()
.
final View viewPos = findViewById(R.id.myCoordinatorLayout);
Snackbar.make(viewPos, R.string.snackbar_text, Snackbar.LENGTH_LONG)
.setAction(R.string.snackbar_action_undo, showListener)
.show();
Cela aura pour effet d’afficher la barre dans le en bas de la CoordinatorLayout
fournie à la fonction make ().
Si vous transmettez une View
qui n'est pas une CoordinatorLayout
, la barre de progression remontera dans l’arbre jusqu’à ce qu’elle trouve une CoordinatorLayout
ou la racine de la présentation.
Définir explicitement une mise en page pour le Snackbar peut ne pas toujours être pratique.
Le problème semble avoir ciblé le parent, plutôt que la Snackbar.
Snackbar snackbar = Snackbar.make(layout, message, duration);
View snackbarLayout = snackbar.getView();
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
// Layout must match parent layout type
lp.setMargins(50, 0, 0, 0);
// Margins relative to the parent view.
// This would be 50 from the top left.
snackbarLayout.setLayoutParams(lp);
snackbar.show();