web-dev-qa-db-fra.com

SnackBar d'en haut. Est-ce possible?

Je voulais fournir l'animation SnackBar de haut, au lieu du comportement normal qui affiche le SnackBar de bas. Est-ce facilement piratable?

13
Fábio Carballo

Non ce n'est pas possible. La documentation indique que

Ils affichent un bref message en bas en bas de l'écran sur mobile et en bas à gauche sur les gros appareils. Les barres de collation apparaissent au-dessus de tous les autres éléments à l'écran et un seul peut être affiché à la fois.

Vous pouvez utiliser une bibliothèque de troisième partie, comme Crouton par exemple

5
Blackbelt

c'est possible. vérifier cette bibliothèque faite par moi https://github.com/AndreiD/TSnackBar

en gros, vous ajoutez 2 nouvelles animations pour glisser du haut et changez la gravité de la mise en page. C'est tout :)

Édition ultérieure: il y a un bug en cours ..... si quelqu'un veut passer un peu de temps à le réparer, nous l'apprécierions tous :)

4
OWADVL
 CoordinatorLayout   coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorLayout);
  Snackbar snackbar = Snackbar.make(coordinatorLayout, "Text", Snackbar.LENGTH_LONG);
   View view = snackbar.getView();
   CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams)view.getLayoutParams();
                params.gravity = Gravity.TOP;
                view.setLayoutParams(params);
      snackbar.show();
4
Vijayan R

EDIT: Cette solution rend Snackbar en haut, mais l'animation est en bas.

C'est possible, au moins avec Matériel Android bibliothèque et un petit truc. Vous pouvez lier le snack-bar à une vue qui s'affiche en première position comme ceci: Sur activity_main.xml:

<FrameLayout>

    <!-- rest of the components here -->
    
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        Android:id="@+id/top_coordinator"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="top"/>
</FrameLayout>

Sur MainActivity.kt:

val snackbar = Snackbar.make(
    findViewById(R.id.top_coordinator),
    "Hello World",
    Snackbar.LENGTH_INDEFINITE
)

snackbar.show()