2015-06-22 5 views
50

Voglio mostrare Android Snackbar(android.support.design.widget.Snackbar) quando l'attività inizia proprio come mostriamo uno Toast.Come mostrare Snackbar all'avvio dell'attività?

Ma il problema è che dobbiamo specificare il layout genitore durante la creazione di Snackbar come questo:

Snackbar.make(parentlayout, "This is main activity", Snackbar.LENGTH_LONG) 
      .setAction("CLOSE", new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

       } 
      }) 
      .setActionTextColor(getResources().getColor(android.R.color.holo_red_light)) 
      .show(); 

Come dare il layout genitore quando mostriamo Snackbar all'inizio delle attività, senza alcun evento click (Se è stato un evento di clic che avremmo potuto facilmente superare la visualizzazione genitore)?

+1

scritto un articolo per http://onetouchcode.com/2016/12/24/use-snackbar-android-apps/, questo sarà utile per sapere di più dettagli di Snackbar – Shailendra

risposta

104

Basta puntare a qualsiasi View all'interno del codice XML Activity's. Si può dare un id al viewGroup radice, ad esempio, e l'uso:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main_activity); 
    View parentLayout = findViewById(android.R.id.content); 
    Snackbar.make(parentLayout, "This is main activity", Snackbar.LENGTH_LONG) 
     .setAction("CLOSE", new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }) 
     .setActionTextColor(getResources().getColor(android.R.color.holo_red_light)) 
     .show(); 
    //Other stuff in OnCreate(); 
} 
+40

Per la visualizzazione root, è anche possibile utilizzare generalmente findViewById (android.R.id.content) come indicato qui http://stackoverflow.com/a/4488149/1518546 –

+0

Visualizza parentLayout = findViewById (R. id.root_view); genera l'eccezione nullpointer nella versione 5.0 o precedente. Come risolvere questo problema? –

+1

@AnandSavjani Il codice funziona perfettamente con me per 5.0 e sotto 5.0, ci deve essere qualche errore nel layout (root_view). Se si utilizza il frammento, è necessario scrivere rootview.findViewById (R.id.your_parent_view); E inoltre non dare lo stesso id come nome del layout. –

2

chiamata di questo metodo in onCreate

Snackbar snack = Snackbar.make(
        (((Activity) context).findViewById(android.R.id.content)), 
        message + "", Snackbar.LENGTH_SHORT); 
snack.setDuration(Snackbar.LENGTH_INDEFINITE);//change Duration as you need 
      //snack.setAction(actionButton, new View.OnClickListener());//add your own listener 
      View view = snack.getView(); 
      TextView tv = (TextView) view 
        .findViewById(android.support.design.R.id.snackbar_text); 
      tv.setTextColor(Color.WHITE);//change textColor 

      TextView tvAction = (TextView) view 
        .findViewById(android.support.design.R.id.snackbar_action); 
      tvAction.setTextSize(16); 
      tvAction.setTextColor(Color.WHITE); 

      snack.show(); 
1

Si può provare questa libreria. Questo è un wrapper per snackbar Android predefinito. https://github.com/ChathuraHettiarachchi/CSnackBar

Snackbar.with(this,null) 
    .type(Type.SUCCESS) 
    .message("Profile updated successfully!") 
    .duration(Duration.SHORT) 
    .show(); 

Questa contiene diversi tipi di snack e anche un CustomView intergrated snack

5

ho avuto problemi a me stesso la visualizzazione Snackbar fino ad ora. Ecco il modo più semplice per visualizzare uno Snackbar. Per visualizzarlo come Avvia la tua attività principale, appena messo queste due linee all'interno del vostro OnCreate()

Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Welcome To Main Activity", Snackbar.LENGTH_LONG); 
    snackbar.show(); 

P.S. Assicurati di aver importato il supporto per il design Android. (Come menzionato nella domanda).

0

Prova questo

Snackbar.make(findViewById(android.R.id.content), "Got the Result", Snackbar.LENGTH_LONG) 
         .setAction("Submit", mOnClickListener) 
         .setActionTextColor(Color.RED) 
         .show();