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?
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.
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.
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();
}
});
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();
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);