risposta

27

E 'possibile effettuare lo snack apparire sulla parte superiore dello schermo utilizzando questo:

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() 

Nota: L'animazione per lo snack inizia dal basso e picchi fino alla parte superiore dello schermo come previsto a causa era destinato ad essere in fondo come da risposta di ianhanniballake.

Per le notifiche che salgono dall'alto, probabilmente sarebbe meglio ottenere un banner personalizzato.

+1

è necessario inserire anche altre animazioni. in_form_top e out_to_top. controlla questo http://stackoverflow.com/a/33333521/1031297 – OWADVL

13

No, per il design dei materiali spec for Snackbars:

snackbar fornire un feedback leggero su un'operazione, mostrando un breve messaggio nella parte inferiore dello schermo.

Come Libreria del progetto si propone di implementare le specifiche del materiale di progettazione, non è possibile posizionare lo Snackbar in qualsiasi posizione diversa da quella inferiore dello schermo (o contenenti CoordinatorLayout).

+0

Ma io sto mostrando che parte superiore dello schermo, il che significa che è ora possibile. Forse non era possibile in passato. – zeeshan

+1

@zeeshan secondo la risposta accettata, l'animazione associata a Snackbar assume solo un posizionamento in basso perché questo è l'unico posizionamento supportato. – ianhanniballake

+0

Non vero. Posso metterlo ovunque. In effetti, l'ho spostato al centro dello schermo sull'app a cui sto lavorando, perché sembrava migliore lì. Penso che dovrei pubblicare una risposta corretta e anche far sapere a Google di aggiornare la loro documentazione. È comune vedere le informazioni obsolete, obsolete e fuorvianti della documentazione di Google. – zeeshan

1

Si può fare in modo semplice

prima creare il layout in cui snack da includere

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

poi nel codice

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

Ecco un modo semplice per aggiungere Bar in utilizzando CoordinatorLayout dalla parte superiore dello schermo ma l'animazione è ancora un problema.

Basta aggiungere un layout CoordinatorLayout al layout come:

<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> 

e poi nella vostra attività ottenere un riferimento ad esso e passarlo al Bar in come di seguito:

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

Bene, è possibile ottenere il layoutparam di snackbar e modificare il bottomMargin nel codice. come

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

quindi è possibile utilizzare un'istanza snack per mostrare ogni volta che vuoi

snackbar.show(); 
Problemi correlati