কাস্টম লেআউট ব্যবহার করে 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" বাটন থাকবে। বাটনে ক্লিক করলে ডায়ালগ বন্ধ হবে এবং টোস্ট মেসেজ দেখাবে।