Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में Snackbar इंटीग्रेशन गाइड

Snackbar क्या है?

Snackbar Material Design का एक घटक है जो स्क्रीन के नीचे एक संक्षिप्त संदेश दिखाता है, वैकल्पिक रूप से एक एक्शन बटन के साथ। यह Toast से भिन्न है क्योंकि:

  • एक्शन बटन सपोर्ट करता है
  • स्वाइप करके डिसमिस किया जा सकता है
  • एनिमेशन के साथ स्लाइड इन/आउट होता है
  • CoordinatorLayout के साथ इंटरैक्ट करता है (FAB मूव, आदि)

निर्भरता

// build.gradle (Module: app)
dependencies {
    implementation 'com.google.android.material:material:1.11.0'
    // इसमें com.google.android.material.snackbar.Snackbar शामिल है
}

बुनियादी उपयोग

XML लेआउट (CoordinatorLayout आवश्यक)

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- मुख्य कंटेंट -->
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="16dp">

        <Button
            android:id="@+id/btnShowSnackbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Snackbar दिखाएं"
            android:layout_gravity="center" />

    </androidx.constraintlayout.widget.ConstraintLayout>

    <!-- FAB (ऑप्शनल - Snackbar के साथ एनिमेट होता है) -->
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:src="@drawable/ic_add" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

MainActivity.java

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import com.google.android.material.snackbar.Snackbar;

public class MainActivity extends AppCompatActivity {
    private CoordinatorLayout coordinatorLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        coordinatorLayout = findViewById(R.id.coordinatorLayout);
        Button btnShow = findViewById(R.id.btnShowSnackbar);

        btnShow.setOnClickListener(v -> showSnackbarWithAction());
    }

    private void showSnackbarWithAction() {
        Snackbar snackbar = Snackbar.make(coordinatorLayout, 
            "इंटरनेट कनेक्शन नहीं है", Snackbar.LENGTH_INDEFINITE)
            .setAction("पुनः प्रयास", view -> {
                // पुनः प्रयास लॉजिक
                Toast.makeText(this, "पुनः प्रयास क्लिक किया गया", Toast.LENGTH_SHORT).show();
            })
            .setActionTextColor(Color.YELLOW) // एक्शन टेक्स्ट रंग
            .setBackgroundTint(Color.parseColor("#333333")) // बैकग्राउंड रंग
            .setTextColor(Color.WHITE); // मैसेज टेक्स्ट रंग

        // कस्टम व्यू एक्सेस (वैकल्पिक)
        View snackbarView = snackbar.getView();
        TextView textView = snackbarView.findViewById(com.google.android.material.R.id.snackbar_text);
        if (textView != null) {
            textView.setMaxLines(3);
            textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        }

        snackbar.show();
    }
}

Snackbar अवधि (Duration)

कॉन्स्टेंटअवधिउपयोग केस
LENGTH_SHORT~1500msसरल सूचनाएं
LENGTH_LONG~2750msअधिक टेक्स्ट
LENGTH_INDEFINITEमैन्युअल डिसमिस तकक्रिटिकल एक्शन, नेटवर्क एरर

उन्नत फीचर्स

कॉलबैक्स

snackbar.addCallback(new Snackbar.Callback() {
    @Override
    public void onShown(Snackbar sb) {
        super.onShown(sb);
        // पूरी तरह दिखाया गया
    }

    @Override
    public void onDismissed(Snackbar sb, int event) {
        super.onDismissed(sb, event);
        // event: DISMISS_EVENT_SWIPE, DISMISS_EVENT_ACTION, 
        //        DISMISS_EVENT_TIMEOUT, DISMISS_EVENT_MANUAL, DISMISS_EVENT_CONSECUTIVE
    }
});

कस्टम लेआउट (BaseTransientBottomBar)

// कस्टम Snackbar क्लास बनाने के लिए BaseTransientBottomBar एक्सटेंड करें
public class CustomSnackbar extends BaseTransientBottomBar {
    // ... इंप्लीमेंटेशन
}

// या सरल: Snackbar में कस्टम व्यू जोड़ें (सीमित)
Snackbar snackbar = Snackbar.make(view, "", Snackbar.LENGTH_LONG);
View customView = getLayoutInflater().inflate(R.layout.custom_snackbar, null);
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
layout.removeAllViews(); // डिफ़ॉल्ट व्यू हटाएं
layout.addView(customView, 0);
snackbar.show();

एक साथ एकाधिक Snackbar (क्यू)

// Snackbar स्वचालित रूप से क्यू करता है
showSnackbar("पहला संदेश");
showSnackbar("दूसरा संदेश"); // पहले के बाद दिखेगा

// तुरंत दिखाने के लिए (क्यू बायपास)
snackbar.setAnimationMode(BaseTransientBottomBar.ANIMATION_MODE_SLIDE);

सामान्य समस्याएं और समाधान

समस्यासमाधान
Snackbar नहीं दिखतापेरेंट CoordinatorLayout होना चाहिए, या Snackbar.make(view, ...) में ऐसा व्यू पास करें जो CoordinatorLayout का वंशज हो
FAB के पीछे छुप जाता हैCoordinatorLayout + FAB + Snackbar स्वचालित हैंडल करता है
लैंडस्केप में कट जाता हैsetMaxInlineActionWidth() या कस्टम लेआउट उपयोग करें
डार्क मोड में रंग गलतsetBackgroundTint() और setTextColor() स्पष्ट रूप से सेट करें
एक्शन बटन काम नहीं करतासुनिश्चित करें setAction() में नॉन-नल लिस्टनर है

Snackbar vs Toast vs Dialog

विशेषताToastSnackbarDialog
इंटरैक्शननहींहाँ (एक्शन)हाँ (फुल UI)
पोजिशनकहीं भीनीचे (फिक्स्ड)केंद्र/कस्टम
डिसमिसऑटोऑटो/स्वाइप/एक्शनमैन्युअल/बटन
मोडलनहींनहींहाँ
उपयोग केसनिष्क्रिय सूचनाएक्शन योग्य फीडबैकनिर्णय/इनपुट

Jetpack Compose में Snackbar

// Compose (Material 3)
val snackbarHostState = rememberSnackbarHostState()
SnackbarHost(snackbarHostState)

// दिखाने के लिए
LaunchedEffect(key) {
    snackbarHostState.showSnackbar(
        message = "संदेश सहेजा गया",
        actionLabel = "पूर्ववत करें",
        duration = SnackbarDuration.Indefinite
    ) { /* एक्शन क्लिक */ }
}

सर्वोत्तम अभ्यास

  • हमेशा CoordinatorLayout रूट के रूप में उपयोग करें
  • संदेश संक्षिप्त रखें (1-2 लाइनें)
  • एक्शन लेबल स्पष्ट रखें: "पूर्ववत करें", "पुनः प्रयास", "सेटिंग्स"
  • LENGTH_INDEFINITE केवल क्रिटिकल एक्शन के लिए उपयोग करें
  • एक्सेसिबिलिटी: कंटेंट डिस्क्रिप्शन जोड़ें, टॉकबैक टेस्ट करें
  • थीमिंग: Widget.MaterialComponents.Snackbar स्टाइल कस्टमाइज़ करें
  1. Android में Snackbar का उपयोग कैसे करें? Android में Snackbar का उपयोग कैसे करें?

    परिचय Snackbar Material Design का एक घटक है जो स्क्रीन के निचले भाग में एक संक्षिप्त संदेश दिखाता है। यह उदाहरण Snackbar के बुनियादी उपयोग और अनुकूलन को दर्शाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.

  1. एंड्रॉइड में Snackbar का लेआउट कस्टमाइज़ कैसे करें एंड्रॉइड में Snackbar का लेआउट कस्टमाइज़ कैसे करें

    Snackbar को पूरी तरह से कस्टमाइज़ करना - रंग, फॉन्ट, एक्शन बटन डिफ़ॉल्ट Snackbar कई बार ऐप की थीम से मेल नहीं खाता। यह उदाहरण दिखाता है कि Snackbar के टेक्स्ट रंग, बैकग्राउंड रंग, फॉन्ट और एक्शन बटन को कैसे कस्टमाइज़ किया जाए। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में प्रोजेक्ट बनाएं और build.g

  1. Android में विभिन्न स्क्रीन साइज़ को सपोर्ट कैसे करें? Android में विभिन्न स्क्रीन साइज़ को सपोर्ट कैसे करें?

    यह उदाहरण दर्शाता है कि Android ऐप में विभिन्न स्क्रीन साइज़ और डेंसिटी को कैसे सपोर्ट किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project पर जाएं और आवश्यक विवरण भरकर प्रोजेक्ट बनाएं। चरण 2: लेआउट XML में कोड जोड़ें res/layout/activity_main.xml में निम्नलिखित कोड जोड़ें