गतिविधि शुरू होने पर स्नैकबार कैसे दिखाएं?


99

मैं Android दिखाना चाहता हूं Snackbar (android.support.design.widget.Snackbar)जब गतिविधि शुरू होती है जैसे हम दिखाते हैं Toast

लेकिन समस्या यह है कि हमें Snackbarइस तरह का निर्माण करते समय माता-पिता के लेआउट को निर्दिष्ट करना होगा:

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

जब हम Snackbarकिसी भी क्लिक इवेंट के बिना गतिविधि की शुरुआत में दिखाते हैं , तो पैरेंट लेआउट कैसे दें (यदि यह एक क्लिक इवेंट था जिसे हम आसानी से पेरेंट व्यू पास कर सकते हैं)?


1
Onetouchcode.com/2016/12/24/use-snackbar-android-apps पर एक लेख लिखा , यह स्नैकबार के अधिक विवरण जानने के लिए सहायक होगा
शैलेन्द्र

जवाबों:


214

बस XML के Viewअंदर किसी को इंगित करें Activity's। आप मूल दृश्यसमूह को एक आईडी दे सकते हैं, उदाहरण के लिए, और उपयोग करें:

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

58
जड़ दृश्य के लिए, आप भी आम तौर पर उपयोग कर सकते हैं findViewById(android.R.id.content)के रूप में यहां सूचित stackoverflow.com/a/4488149/1518546
जॉन कमिंग्स

पैरेंटलैट देखें = findViewById (R.id.root_view); 5.0 या निचले संस्करण में nullpointer अपवाद फेंकता है। इस समस्या को हल कैसे करें ?
आनंद सवजानी

1
@AnandSavjani 5.0 और नीचे 5.0 के लिए कोड मेरे साथ पूरी तरह से काम कर रहा है, आपके लेआउट (root_view) में कुछ त्रुटि होनी चाहिए। यदि आप खंड का उपयोग कर रहे हैं तो आपको rootview.findViewById (R.id.your_parent_view) लिखना चाहिए; और लेआउट नाम के समान आईडी भी न दें।
सुधीश मोहन

मेरा मानना ​​है कि यह NullpointerException को फेंकता है यदि आप CoordinatorLayout को रूट के रूप में उपयोग नहीं कर रहे हैं।
ईशान

समर्थन डिजाइन लाइब्रेरी को शामिल करना न भूलें: 'com.android.support:design:27.0.0'
निकोला

27

मुझे अब तक स्नैकर को प्रदर्शित करने में परेशानी हुई है। यहां स्नैकबार प्रदर्शित करने का सबसे सरल तरीका है। इसे अपनी मुख्य गतिविधि प्रारंभ के रूप में प्रदर्शित करने के लिए, बस इन दो पंक्तियों को अपने अंदर रखेंOnCreate()

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

PS बस सुनिश्चित करें कि आपने Android डिज़ाइन समर्थन आयात किया है (जैसा कि प्रश्न में उल्लेख किया गया है)।

कोटलिन के लिए,

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

8

इसे इस्तेमाल करे

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

3

इस विधि को 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();

2

स्नैक बार दिखाने के लिए एक बर्तन कार्य करता है

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

गतिविधि में उदाहरण का उपयोग करना

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

फ्रैगमेंट में उदाहरण का उपयोग करना

  showSnackBar(getActivity(), "No internet")

आशा है कि यह मदद करेगा


1

आप इस लाइब्रेरी को आज़मा सकते हैं। यह एंड्रॉइड डिफ़ॉल्ट स्नैकबार के लिए एक आवरण है। https://github.com/ChathuraHettiarachchi/CSnackBar

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

इसमें कई प्रकार के स्नैकबार शामिल हैं और यहां तक ​​कि एक कस्टमव्यू इंटरग्रेटेड स्नैकबार भी है


1

यह सीधे onCreate के अंदर निम्नलिखित कोड का उपयोग करके किया जा सकता है। Android के डिफ़ॉल्ट लेआउट का उपयोग करके

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

Android संस्करण 5.x पर - अचानक getWindow().getDecorView()सभी स्क्रीन वापस करें, 'नीचे बटन' (जैसे घर, पीछे आदि) शामिल करें। तो मेरा नाश्ता इस बटन को दिखा रहा था, ऐप में नहीं
alena_fox_spb

अद्यतन उत्तर की जाँच करें। यह आपकी समस्या का समाधान करेगा। एंड्रॉइड के डिफॉल्ट लेआउट का उपयोग करें
जरीन रॉक्स

हां, जब मैंने काम शुरू windowकिया तो android.R.id.contentसब बदल गया । इसलिए मैंने भविष्य में इसके साथ किसी और मुद्दे को हल करने के लिए अपनी टिप्पणी लिखी)
alena_fox_spb

0

आप अपनी सभी गतिविधियों के लिए एक सुपर क्लास को भी परिभाषित कर सकते हैं और मूल गतिविधि में एक बार दृश्य देख सकते हैं।

उदाहरण के लिए

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

और आपके स्नैक्स आपके ऐप की हर गतिविधि में इस तरह दिखेंगे:

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

प्रदर्शन के लिए बेहतर है कि आपको हर गतिविधि के लिए एक बार दृश्य ढूंढना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.