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

অ্যান্ড্রয়েডে অ্যালার্ট ডায়ালগকে স্ক্রিনের ৫০% আকারে সেট করা

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`) ব্যবহার করে ডাইমেনশন রিসোর্সে সংজ্ঞায়িত করুন।

  1. অ্যান্ড্রয়েডে ডিভাইস স্ক্রিন সাইজ ক্যাটাগরি (small, normal, large, xlarge) প্রোগ্রামেটিক্যালি জানা

  2. Android-এ বিভিন্ন স্ক্রিন সাইজ সাপোর্ট করার পদ্ধতি

  3. Android-এ GridLayout স্ক্রিন সাইজে ফিট করা

  4. আপনার অ্যান্ড্রয়েড স্ক্রিন টিভিতে কাস্ট করার উপায়