AlertDialog কাস্টম সাইজ: WindowManager.LayoutParams ব্যবহার
ডিফল্টভাবে AlertDialog স্ক্রিনের প্রায় ৮০% প্রস্থ নেয়। এই টিউটোরিয়ালটি দেখাবে কীভাবে ডায়ালগের প্রস্থ এবং উচুচ্চতা স্ক্রিনের ৫০% সেট করা যায়।
পদক্ষেপ ১: প্রজেক্ট তৈরি করুন
Android Studio-তে নতুন প্রজেক্ট শুরু করুন।
পদক্ষেপ ২: লেআউট XML (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<Button
android:id="@+id/btnAlert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center_horizontal"
android:layout_marginTop="32dp"
android:text="Show Alert Dialog" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
পদক্ষেপ ৩: MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private CoordinatorLayout coordinatorLayout;
private Button btnAlert;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = findViewById(R.id.coordinator_layout);
btnAlert = findViewById(R.id.btnAlert);
btnAlert.setOnClickListener(v -> showCustomSizeDialog());
}
private void showCustomSizeDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Say Hello!");
builder.setMessage("Do you want to say it?");
builder.setPositiveButton("Say", (dialog, which) -> { /* Action */ });
builder.setNegativeButton("No", null);
AlertDialog dialog = builder.create();
dialog.show(); // show() কল করার পরেই window attributes সেট করতে হয়
// স্ক্রিন ডাইমেনশন পান
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int screenWidth = displayMetrics.widthPixels;
int screenHeight = displayMetrics.heightPixels;
// ডায়ালগ উইন্ডোর লেআউট প্যারামিটার সেট
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.copyFrom(dialog.getWindow().getAttributes());
// ৫০% প্রস্থ এবং ৫০% উচুচ্চতা
layoutParams.width = (int) (screenWidth * 0.5f);
layoutParams.height = (int) (screenHeight * 0.5f);
// ঐচ্ছিক: ডায়ালগকে সেন্টারে রাখুন
layoutParams.gravity = android.view.Gravity.CENTER;
dialog.getWindow().setAttributes(layoutParams);
}
}
পদক্ষেপ ৪: AndroidManifest.xml
সাধারণ ম্যানিফেস্ট যথেষ্ট। কোনোพิเศষ কনফিগারেশন দরকার নেই।
গুরুত্বপূর্ণ নোটসমূহ
- dialog.show() πρώতে কল করুন: Window attributes শুধু show()-এর পরই মডিফাই করা যায়
- LayoutParams.copyFrom(): বিদ্যমান অ্যাট্রিবিউট (ডিম, অ্যানিমেশন ইত্যাদি) সংরক্ষণ করে
- Gravity.CENTER: ডিফল্ট সেন্টারই, কিন্তু স্পষ্ট করা ভালো
- minWidth/minHeight: কন্টেন্ট বড় হলে ডায়ালগ বড় হতে পারে। `layoutParams.minWidth = 0; layoutParams.minHeight = 0;` সেট করুন বাধা দিতে।
বিকল্প পদ্ধতি: কাস্টম লেআউট DialogFragment (সুপারিশ করা)
public class CustomSizeDialogFragment extends DialogFragment {
@Override
public void onStart() {
super.onStart();
if (getDialog() != null && getDialog().getWindow() != null) {
DisplayMetrics metrics = new DisplayMetrics();
requireActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
getDialog().getWindow().setLayout(
(int) (metrics.widthPixels * 0.5f),
(int) (metrics.heightPixels * 0.5f)
);
}
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(requireActivity())
.setTitle("Custom Size Dialog")
.setMessage("This dialog is 50% of screen size")
.setPositiveButton("OK", null)
.create();
}
}
আধুনিক বিকল্প: BottomSheetDialogFragment
নিচ থেকে স্লাইড আপ মডালের জন্য (Material Design কনসিস্টেন্সি):
BottomSheetDialogFragment bottomSheet = new MyBottomSheetDialogFragment(); bottomSheet.show(getSupportFragmentManager(), "TAG");
রেসপন্সিভ ডিজাইন টিপ
হার্ডকোডেড ৫০% এর বদলে:
- স্মল ফোন: ৯০% প্রস্থ
- ট্যাবলেট: ৬০% প্রস্থ
- લ্যান্ডস্কেপ: ৫০% প্রস্থ
Resource qualifier (`values-sw600dp`, `values-land`) ব্যবহার করে ডাইমেনশন রিসোর্সে সংজ্ঞায়িত করুন।