Antwort

27

Es ist möglich, die snackbar erscheinen auf dem Bildschirm zu machen mit diesem:

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 von unten beginnt und Überspannungen an den oberen Rand des Bildschirms wie erwartet, weil es sollte laut Ianhanniballakes Antwort unten sein.

Für Benachrichtigungen, die von oben kommen, wäre es wahrscheinlich besser, stattdessen ein benutzerdefiniertes Banner zu erhalten.

+1

müssen Sie auch andere Animationen einfügen. in_form_top und out_to_top. Überprüfen Sie diese http://StackOverflow.com/a/33333521/1031297 – OWADVL

13

Nein, pro Materialdesign spec for Snackbars:

Snackbars bieten leichte Feedback über eine Operation durch eine kurze Nachricht am unteren Rand des Bildschirms zeigt.

wie die Design-Bibliothek der Materialdesignspezifikationen implementieren will, ist es nicht möglich, den Imbiss in irgendeiner anderen Position als der unteren Rand des Bildschirms (oder mit einem Gehalt CoordinatorLayout) zu positionieren.

+0

Aber ich bin es zeigt oben auf dem Bildschirm, was bedeutet es nun möglich ist. Vielleicht war es in der Vergangenheit nicht möglich. – zeeshan

+1

@zeeshan gemäß der angenommenen Antwort, die Animation, die mit der Snackbar verbunden ist, nimmt nur eine untere Positionierung an, weil das die einzige Positionierung ist, die unterstützt wird. – ianhanniballake

+0

Nicht wahr. Ich kann es überall hinstellen. Tatsächlich habe ich es gerade in die Mitte des Bildschirms der App verschoben, an der ich gerade arbeite, weil es dort besser aussieht. Ich denke, ich sollte eine korrekte Antwort posten und Google seine Dokumentation aktualisieren lassen. Es ist üblich, veraltete, veraltete und irreführende Informationen der Google-Dokumentation zu sehen. – zeeshan

1

Es kann

zuerst das Layout erstellen auf einfache Art und Weise erfolgen, wo snackbar

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

dann

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); 
4

Hier ist eine einfache Art und Weise SnackBar mit CoordinatorLayout in-Code enthalten sein hinzufügen oben auf dem Bildschirm, aber die Animation ist immer noch ein Problem.

einfach ein CoordinatorLayout Layout zum Layout wie hinzufügen:

<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 erhalten einen Verweis auf sie und geben sie an die SnackBar wie folgt:

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

1

Nun, Sie können Snackbar Layoutparam erhalten und ändern Sie den unteren Rand im Code. wie

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 snackbar Instanz verwenden zu zeigen, wann immer Sie wollen

snackbar.show(); 
Verwandte Themen