2015-06-22 13 views
50

Ich möchte Android Snackbar(android.support.design.widget.Snackbar) zeigen, wenn die Aktivität beginnt, genau wie wir eine Toast zeigen.Wie wird die Snackbar angezeigt, wenn die Aktivität startet?

Aber das Problem ist, müssen wir das übergeordnete Layout angeben, wenn Snackbar wie folgt zu erstellen:

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

Wie Eltern Layout geben, wenn wir Snackbar zu Beginn der Tätigkeit ohne Click-Ereignisse zeigen (Wenn es war ein Klickereignis, das wir problemlos über die Elternansicht haben könnten)?

+1

Artikel zu http://onetouchcode.com/2016/12/24/use-snackbar-android-apps/ Geschrieben wird dies hilfreich sein, mehr zu wissen Details zur Snackbar – Shailendra

Antwort

104

Zeigen Sie einfach auf eine View innerhalb der Activity's XML. Sie können eine ID an die Wurzel Viewgroup, zum Beispiel geben, und verwenden:

@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

Für die Stammansicht können Sie auch 'findViewById (android.R.id.content)' wie hier angegeben verwenden http://stackoverflow.com/a/4488149/1518546 –

+0

View parentLayout = findViewById (R. id.root_view); löst die Nullpointer-Ausnahme in Version 5.0 oder niedriger aus. Wie man dieses Problem löst? –

+1

@AnandSavjani Der Code funktioniert perfekt mit mir für 5,0 und unter 5.0, es muss ein Fehler in Ihrem Layout (root_view) sein. Wenn Sie ein Fragment verwenden, sollten Sie rootview.findViewById (R.id.your_parent_view); Und geben Sie nicht die gleiche ID wie Layout-Namen. –

2

Aufruf dieser Methode 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

Sie diese Bibliothek ausprobieren können. Dies ist ein Wrapper für Android Standard Snackbar. https://github.com/ChathuraHettiarachchi/CSnackBar

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

Diese enthält mehrere Arten von snackbar und sogar ein Custom intergrated snackbar

5

ich Mühe habe, habe ich Snackbar angezeigt, bis jetzt. Hier ist die einfachste Möglichkeit, eine Snackbar anzuzeigen. So zeigen Sie es als Ihre Haupttätigkeit beginnt, nur setzen diese beiden Zeilen in Ihrem OnCreate()

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

P. S. Stellen Sie nur sicher, dass Sie den Android Design Support importiert haben (wie in der Frage erwähnt).

0

Versuchen Sie, diese

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