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

Android में कस्टम AlertDialog View कैसे इम्प्लीमेंट करें?

Android में कस्टम AlertDialog इम्प्लीमेंट करना

यह ट्यूटोरियल दिखाता है कि कैसे कस्टम लेआउट के साथ AlertDialog बनाया जाता है, जिसमें कस्टम टाइटल, आइकन, मैसेज, और बटन स्टाइलिंग शामिल है।

चरण 1: प्रोजेक्ट बनाएं

Android Studio में नया प्रोजेक्ट बनाएं।

चरण 2: मेन लेआउट में बटन

res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/buttonShowDialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:backgroundTint="@color/colorPrimary"
        android:padding="15dp"
        android:text="कस्टम डायलॉग दिखाएं"
        android:textAllCaps="false"
        android:textColor="@android:color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

चरण 3: कस्टम डायलॉग लेआउट

res/layout/my_dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">
    
    <!-- हेडर सेक्शन -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="@color/colorPrimary"
        android:gravity="center">
        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/ic_success"
            android:contentDescription="सफलता" />
    </RelativeLayout>
    
    <!-- टाइटल -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="सफलता!"
        android:textAlignment="center"
        android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" />
    
    <!-- मैसेज -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla eu erat tincidunt lacus fermentum rutrum."
        android:textAlignment="center"
        android:textAppearance="@style/TextAppearance.MaterialComponents.Body1" />
    
    <!-- एक्शन बटन -->
    <Button
        android:id="@+id/buttonOk"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:background="@drawable/button_background"
        android:text="ठीक है"
        android:textColor="@color/colorPrimary" />
</LinearLayout>

चरण 4: बटन बैकग्राउंड ड्रॉएबल

res/drawable/button_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/colorPrimaryDark" />
            <stroke android:width="2dp" android:color="@color/colorPrimary" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item>
        <shape>
            <stroke android:width="2dp" android:color="@color/colorPrimary" />
            <solid android:color="@android:color/transparent" />
            <corners android:radius="8dp" />
        </shape>
    </item>
</selector>

चरण 5: वेक्टर आइकन (ic_success.xml)

res/drawable/ic_success.xml - VectorDrawable चेकमार्क आइकन के लिए।

चरण 6: MainActivity में डायलॉग दिखाएं

src/MainActivity.java:

package com.app.sample;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        findViewById(R.id.buttonShowDialog).setOnClickListener(v -> showCustomDialog());
    }

    private void showCustomDialog() {
        // लेआउट इन्फ्लेट करें
        ViewGroup viewGroup = findViewById(android.R.id.content);
        View dialogView = LayoutInflater.from(this).inflate(R.layout.my_dialog, viewGroup, false);
        
        // AlertDialog बिल्डर
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(dialogView);
        builder.setCancelable(true); // बैक प्रेस से बंद होने दें
        
        AlertDialog alertDialog = builder.create();
        
        // डायलॉग दिखने के बाद विंडो फीचर्स सेट करें
        alertDialog.show();
        
        // वैकल्पिक: डायलॉग विंडो कस्टमाइजेशन
        if (alertDialog.getWindow() != null) {
            alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
            // alertDialog.getWindow().setLayout(800, ViewGroup.LayoutParams.WRAP_CONTENT);
        }
        
        // बटन क्लिक हैंडलर
        Button btnOk = dialogView.findViewById(R.id.buttonOk);
        btnOk.setOnClickListener(v -> alertDialog.dismiss());
    }
}

एडवांस्ड: DialogFragment (अनुशंसित - लाइफसाइकिल सेफ)

public class CustomDialogFragment extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View view = LayoutInflater.from(requireContext()).inflate(R.layout.my_dialog, null);
        
        AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
        builder.setView(view);
        
        AlertDialog dialog = builder.create();
        
        view.findViewById(R.id.buttonOk).setOnClickListener(v -> dismiss());
        
        return dialog;
    }
    
    @Override
    public void onStart() {
        super.onStart();
        if (getDialog() != null && getDialog().getWindow() != null) {
            getDialog().getWindow().setLayout(
                ViewGroup.LayoutParams.MATCH_PARENT, 
                ViewGroup.LayoutParams.WRAP_CONTENT);
            getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        }
    }
}

// उपयोग:
new CustomDialogFragment().show(getSupportFragmentManager(), "CustomDialog");

बॉटम शीट डायलॉग (मटेरियल डिज़ाइन)

// BottomSheetDialogFragment उपयोग करें
public class CustomBottomSheetDialog extends BottomSheetDialogFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.my_dialog, container, false);
        view.findViewById(R.id.buttonOk).setOnClickListener(v -> dismiss());
        return view;
    }
}

// या BottomSheetDialog सीधे
BottomSheetDialog dialog = new BottomSheetDialog(this);
dialog.setContentView(R.layout.my_dialog);
dialog.show();

कस्टम डायलॉग के लिए बेस्ट प्रैक्टिसेज

  • DialogFragment उपयोग करें - कॉन्फिगरेशन चेंज (रोटेशन) पर क्रैश नहीं होता
  • wrap_content ऊंचाई उपयोग करें - डायलॉग कंटेंट के अनुसार एडजस्ट हो
  • पारदर्शी विंडो बैकग्राउंड सेट करें राउंडेड कॉर्नर्स के लिए
  • एक्सेसिबिलिटी: फोकस ट्रैपिंग, स्क्रीन रीडर लेबल्स सुनिश्चित करें
  • थीम एट्रिब्यूट्स उपयोग करें हार्डकोडेड रंगों के बजाय
  • कीबोर्ड हैंडलिंग: setSoftInputMode() सेट करें अगर इनपुट फील्ड हैं

चरण 7: मैनिफेस्ट

स्टैंडर्ड कॉन्फ़िगरेशन।

AlertDialog vs DialogFragment vs BottomSheetDialog

प्रकारउपयोग केसलाइफसाइकिल सेफ
AlertDialogसिंपल कन्फर्मेशन, अलर्टनहीं (रोटेशन पर क्रैश)
DialogFragmentकॉम्प्लेक्स डायलॉग्स, फॉर्म्सहां
BottomSheetDialogमोडल बॉटम शीट, एक्शन शीट्सहां
Jetpack Compose DialogCompose UIहां
  1. एंड्रॉइड में बॉटम शीट (BottomSheet) विजेट कैसे इम्प्लीमेंट करें? एंड्रॉइड में बॉटम शीट (BottomSheet) विजेट कैसे इम्प्लीमेंट करें?

    एंड्रॉइड में BottomSheetBehavior के साथ बॉटम शीट इम्प्लीमेंट करना Bottom Sheet मटीरियल डिज़ाइन कंपोनेंट है जो स्क्रीन के नीचे से स्लाइड होकर कंटेंट दिखाता है। दो प्रकार हैं: Modal Bottom Sheet — डायलॉग जैसा, बैकग्राउंड डिम, बाहर टैप करके बंद होता है। BottomSheetDialogFragment से बनता है। Persistent

  1. एंड्रॉइड में एक्शन बार में कस्टम व्यू कैसे प्रदर्शित करें? एंड्रॉइड में एक्शन बार में कस्टम व्यू कैसे प्रदर्शित करें?

    कस्टम लेआउट के साथ एक्शन बार पर्सनलाइज़ करें यह उदाहरण दर्शाता है कि कस्टम लेआउट फाइल का उपयोग करके एक्शन बार में कस्टम व्यू (लोगो, शीर्षक, आइकन) कैसे सेट करें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: मेन लेआउट res/layout/activity_main.xml - साधारण लेआउट। चर

  1. Android में कस्टम लिस्ट व्यू में सर्च फंक्शनैलिटी कैसे जोड़ें? Android में कस्टम लिस्ट व्यू में सर्च फंक्शनैलिटी कैसे जोड़ें?

    Android में कस्टम लिस्ट व्यू में सर्च फीचर इम्प्लीमेंट करना यह ट्यूटोरियल दिखाता है कि कैसे एक कस्टम लिस्ट व्यू में सर्च फंक्शनैलिटी जोड़ी जाती है, जिससे यूजर लिस्ट आइटम्स को रियल-टाइम में फ़िल्टर कर सकते हैं। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनकर नया प्रोजेक्ट बनाए