wake-up-neo.com

Wie ändere ich die ursprüngliche Ausrichtung einer Android Snackbar von unten nach oben?

Die neueste Android-Bibliothek ist erst vor ein paar Tagen auf den Markt gekommen, aber ich möchte, dass die SnackBar oben auf dem Bildschirm angezeigt wird, vorzugsweise in einem RelativeLayout, wie es in der übergeordneten Ansicht angezeigt wird.

Wie kann man die anfängliche Ausrichtung der SnackBar, von der ich annehme, dass sie layout_alignParentBottom ist, in layout_alignParentTop ändern?

13
apollow

Es ist möglich, die Snackbar auf dem Bildschirm wie folgt anzuzeigen:

Snackbar snack = Snackbar.make(parentLayout, str, Snackbar.LENGTH_LONG);
View view = snack.getView();
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams();
params.gravity = Gravity.TOP;
view.setLayoutParams(params);
snack.show()

Hinweis: Die Animation für die Snackbar beginnt am unteren Rand und wird wie erwartet bis zum oberen Rand des Bildschirms geführt, da sie gemäß der Antwort von ianhanniballake unten sein sollte.

Für Benachrichtigungen, die von oben auftauchen, empfiehlt es sich, stattdessen ein benutzerdefiniertes Banner zu erhalten.

29
apollow

Nein, je nach Materialdesign Spezifikation für Snackbars :

Snackbars bieten ein leichtes Feedback zu einer Operation, indem sie eine kurze Meldung am unteren Rand des Bildschirms anzeigen.

Da die Designbibliothek die Materialdesignspezifikationen implementieren möchte, ist es nicht möglich, die Snackbar an einer anderen Position als der Unterseite des Bildschirms (oder mit CoordinatorLayout) zu positionieren.

13
ianhanniballake

Hier ist eine einfache Möglichkeit, SnackBar mit CoordinatorLayout vom oberen Bildschirmrand aus hinzuzufügen, aber die Animation ist immer noch ein Problem.

Fügen Sie einfach ein CoordinatorLayout-Layout zu Ihrem Layout hinzu:

<Android.support.design.widget.CoordinatorLayout
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentTop="true"
    Android:layout_centerHorizontal="true"
    Android:id="@+id/snackbarlocation">
</Android.support.design.widget.CoordinatorLayout>

und dann in Ihrer Aktivität einen Verweis darauf bekommen und wie folgt an die SnackBar übergeben:

    CoordinatorLayout Clayout = (CoordinatorLayout)findViewById(R.id.snackbarlocation);

    FabButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Snackbar.make(Clayout, "This snack bar located at top", Snackbar.LENGTH_SHORT).show();
        }
    });

Credits

4
Atul O Holic

Nun, Sie können das Layoutparam von snackbar erhalten und den bottomMargin im Code ändern 

Snackbar snackbar = Snackbar.make(rootView, message, Snackbar.LENGTH_LONG);
View view = snackbar.getView();
FrameLayout.LayoutParams para = (CoordinatorLayout) view.getLayoutParams();
params.bottomMargin = showAtLocation // pass your location offset here
view.setLayoutParams(params);

Dann können Sie die Snackbar-Instanz verwenden, um wann immer Sie möchten

snackbar.show();
1
Cheng

Dies kann auf einfache Weise erfolgen

erstellen Sie zuerst das Layout, an dem die Snackbar eingefügt werden soll

<LinearLayout
    Android:id="@+id/info_container"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical"/>

dann im Code

  ll_mesg.addView(Snackbar.make(ll_mesg, "Please choose your luck from one of box", Snackbar.LENGTH_LONG)
            .getView());
    new Handler().postDelayed(new Runnable() {
        public void run() {
            ll_mesg.removeAllViews();
            }
        }
        ,1000);
1
yubaraj poudel