Etkinlik başladığında Snackbar nasıl gösterilir?


105

Android'i göstermek istiyorum Snackbar (android.support.design.widget.Snackbar)Aktivite başladığında tıpkı a Toast.

Ancak sorun şu ki, Snackbarbu şekilde oluştururken ana düzeni belirlememiz gerekiyor :

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

SnackbarHerhangi bir tıklama etkinliği olmadan etkinliğin başlangıcında gösterdiğimizde ana sayfa düzeni nasıl verilir (Bu bir tıklama olayı olsaydı, ana görünümü kolayca geçebilirdik)?


Yanıtlar:


224

XML Viewiçindeki herhangi birine işaret etmeniz yeterli Activity's. Örneğin, root viewGroup'a bir id verebilir ve şunu kullanabilirsiniz:

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

60
Kök görünüm için, genellikle findViewById(android.R.id.content)burada belirtildiği gibi kullanabilirsiniz stackoverflow.com/a/4488149/1518546
John Cummings

ParentLayout = findViewById (R.id.root_view); 5.0 veya daha düşük sürümde nullpointer istisnası atar. Bu problem nasıl çözülür?
Anand Savjani

1
@AnandSavjani Kod 5.0 ve 5.0'ın altında benimle mükemmel çalışıyor, düzeninizde bazı hatalar olmalı (root_view). Parça kullanıyorsanız, rootview.findViewById (R.id.your_parent_view) yazmalısınız; Ayrıca düzen adıyla aynı kimliği vermeyin.
Sudheesh Mohan

Kök olarak CoordinatorLayout kullanmıyorsanız, NullpointerException attığına inanıyorum.
Ishaan

Destek tasarım kitaplığını eklemeyi unutmayın: 'com.android.support:design:27.0.0'
Nikola

32

Şimdiye kadar Snackbar'ı görüntülerken kendimde sorun yaşadım. Snackbar'ı görüntülemenin en basit yolu burada. Ana Aktiviteniz Başlarken görüntülemek için, bu iki satırıOnCreate()

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

Not: Android Tasarım Desteğini içe aktardığınızdan emin olun. (Soruda belirtildiği gibi).

Kotlin için,

Snackbar.make(findViewById(android.R.id.content), message, Snackbar.LENGTH_SHORT).show()

9

Bunu dene

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

3

onCreate'de bu yöntemi çağırın

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

2

Gösteri atıştırmalık büfesi için gereçler işlevi

fun showSnackBar(activity: Activity, message: String, action: String? = null,
    actionListener: View.OnClickListener? = null, duration: Int = Snackbar.LENGTH_SHORT) {
    val snackBar = Snackbar.make(activity.findViewById(android.R.id.content), message, duration)
        .setBackgroundColor(Color.parseColor("#CC000000")) // todo update your color
        .setTextColor(Color.WHITE)
    if (action != null && actionListener!=null) {
        snackBar.setAction(action, actionListener)
    }
    snackBar.show()
}

Aktivitede kullanım örneği

  showSnackBar(this, "No internet")
  showSnackBar(this, "No internet", duration = Snackbar.LENGTH_LONG)
  showSnackBar(activity, "No internet", "OK", View.OnClickListener { 
       // handle click 
  })

Parçada kullanım örneği

  showSnackBar(getActivity(), "No internet")

Umarım yardımcı olur


2

OnCreate içindeki aşağıdaki kodlar kullanılarak basitçe yapılabilir. Android'in varsayılan düzenini kullanarak

Snackbar.make(findViewById(android.R.id.content),"Your Message",Snackbar.LENGTH_LONG).show();

android sürüm 5.x - aniden getWindow().getDecorView()TÜM ekrana dönün, 'alt düğmeleri' ekleyin (ev, geri vb. gibi). Yani benim atıştırmalığım uygulamada değil bu düğmelere gösteriliyordu
alena_fox_spb

güncellenmiş yanıtı kontrol edin. Sorununuzu çözecektir. Android'in varsayılan düzenini kullan
Jarin Rocks

evet, işe başlama windowdurumundan android.R.id.contenttümüyle değiştiğimde . Bu yüzden
yorumumu

1

Bu kütüphaneyi deneyebilirsiniz. Bu, android varsayılan snackbar için bir sarmalayıcıdır. https://github.com/ChathuraHettiarachchi/CSnackBar

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

Bu, birden fazla türde atıştırmalık çubuğu ve hatta özel görünümle entegre edilmiş bir atıştırmalık çubuğu içerir


0

Ayrıca tüm etkinlikleriniz için bir süper sınıf tanımlayabilir ve görünümü ebeveyn etkinliğinde bir kez bulabilirsiniz.

Örneğin

AppActivity.java:

public class AppActivity extends AppCompatActivity {

    protected View content;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        changeLanguage("fa");
        content = findViewById(android.R.id.content);
    }
}

ve atıştırmalıklarınız, uygulamanızdaki her etkinlikte şöyle görünecektir:

Snackbar.make(content, "hello every body", Snackbar.LENGTH_SHORT).show();

Görünümü her etkinlik için bir kez bulmanız performans açısından daha iyidir.


0

Biraz metin göstermenin basit yolu:

Snackbar.make(view, "Sample Text", Snackbar.LENGTH_SHORT).show();

ve düğmeli metni göstermek için:

Snackbar.make(view, "Sample Text", Snackbar.LENGTH_SHORT).setAction("Ok", new View.OnClickListener() {
            @Override 
            public void onClick(View view) {

            } 
        }).show();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.