কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড অ্যাপে কাস্টম অ্যালার্ট ডায়ালগ তৈরির পদ্ধতি

কাস্টম লেআউট ব্যবহার করে AlertDialog তৈরি করা

স্ট্যান্ডার্ড AlertDialog-এর বদলে কাস্টম লেআউট ব্যবহার করে সম্পূর্ণরূপে কাস্টমাইজড ডায়ালগ তৈরি করা যায়। এটি ব্র্যান্ডিং, জটিল ফর্ম, বা অনন্য UI-এর জন্য আদর্শ।

ধাপ ১: নতুন প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project থেকে প্রজেক্ট তৈরি করুন।

ধাপ ২: মূল লেআউট (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="MainActivity">
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/buttonShowCustomDialog"
        android:layout_marginBottom="86dp"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:text="CLICK TO VIEW CUSTOM ALERT DIALOG"
        android:textSize="18sp"
        android:textStyle="bold" />
    
    <Button
        android:id="@+id/buttonShowCustomDialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="131dp"
        android:onClick="showCustomDialog"
        android:text="Click"
        android:textStyle="bold"
        style="@android:style/Widget.DeviceDefault.Button.Inset" />
</RelativeLayout>

ধাপ ৩: কাস্টম ডায়ালগ লেআউট (custom_dialog.xml)

res/layout/custom_dialog.xml তৈরি করুন:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="wrap_content"
    android:orientation="vertical"
    android:padding="24dp">
    
    <ImageView
        android:id="@+id/image"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"
        app:srcCompat="@android:drawable/ic_dialog_alert"
        android:contentDescription="Alert icon" />
    
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/image"
        android:layout_centerHorizontal="true"
        android:text="Alert...!"
        android:textSize="20sp"
        android:textStyle="bold"
        android:textColor="@android:color/black" />
    
    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/text"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="8dp"
        android:text="This is a custom alert dialog with custom layout."
        android:textSize="14sp"
        android:textColor="#666666" />
    
    <Button
        android:id="@+id/dialogButtonOK"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/message"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="24dp"
        android:paddingHorizontal="32dp"
        android:text="Dismiss"
        android:textSize="16sp"
        style="@style/Widget.AppCompat.Button.Colored" />
</RelativeLayout>

ধাপ ৪: MainActivity.java বাস্তবায়ন

import android.app.Dialog;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = findViewById(R.id.buttonShowCustomDialog);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showCustomDialog();
            }
        });
    }

    private void showCustomDialog() {
        final Dialog dialog = new Dialog(this);
        dialog.setContentView(R.layout.custom_dialog);
        dialog.setCancelable(true); // বাইরে ক্লিক করলে বন্ধ হবে
        dialog.setCanceledOnTouchOutside(true);
        
        // ডায়ালগ উইন্ডোর কনফিগারেশন
        if (dialog.getWindow() != null) {
            dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
            // dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        }
        
        Button dialogButton = dialog.findViewById(R.id.dialogButtonOK);
        dialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, "Dialog Dismissed!", Toast.LENGTH_SHORT).show();
            }
        });
        
        dialog.show();
    }
}

আধুনিক এবং ভালো পদ্ধতি: DialogFragment ব্যবহার করুন

DialogFragment লাইফসাইকেল-অವೇয়ার, কনফিগারেশন চেঞ্জ (রোটেশন) হ্যান্ডল করতে পারে এবং ব্যাকস্ট্যাক ম্যানেজমেন্ট দেয়।

public class CustomDialogFragment extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        View view = LayoutInflater.from(getActivity()).inflate(R.layout.custom_dialog, null);
        
        Button btnDismiss = view.findViewById(R.id.dialogButtonOK);
        btnDismiss.setOnClickListener(v -> dismiss());
        
        builder.setView(view);
        return builder.create();
    }
    
    @Override
    public void onStart() {
        super.onStart();
        // ডায়ালগ প্রস্থ ফুল স্ক্রিন করুন (ঐচ্ছিক)
        if (getDialog() != null && getDialog().getWindow() != null) {
            getDialog().getWindow().setLayout(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
            );
        }
    }
}

// দেখানোর জন্য:
new CustomDialogFragment().show(getSupportFragmentManager(), "CustomDialog");

DialogFragment-এর সুবিধা

  • অটোমেটিক্যালি কনফিগারেশন চেঞ্জ (রোটেশন) হ্যান্ডল করে
  • ব্যাকস্ট্যাকে যোগ করা যায় (ব্যাক বাটনে ডismiss)
  • লাইফসাইকেল মেথড (onStart, onStop, onDestroyView) উপলব্ধ
  • ViewModel এবং LiveData সহ ইন্টিগ্রেশন সহজ

ধাপ ৫: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

অ্যাপ্লিকেশন টেস্ট করুন

অ্যাপ রান করুন, "Click" বাটনে ক্লিক করলে কাস্টম ডায়ালগ দেখাবে। ডায়ালগে একটি আইকন, টাইটেল, মেসেজ এবং "Dismiss" বাটন থাকবে। বাটনে ক্লিক করলে ডায়ালগ বন্ধ হবে এবং টোস্ট মেসেজ দেখাবে।

  1. অ্যান্ড্রয়েড অ্যাপে TextToSpeech তৈরি করার পদ্ধতি

  2. Facebook-এ Android অ্যাপ তৈরি করার পদ্ধতি

  3. অ্যান্ড্রয়েডে কাস্টম AlertDialog ভিউ কীভাবে বাস্তবায়ন করবেন?

  4. Android-এ মাল্টিলেভেল ListView (ExpandableListView) তৈরির পদ্ধতি