Grid Layout
🧱 GridLayout কী
👉 GridLayout হলো এমন একটি ViewGroup
যা তার child views গুলোকে সারি (rows) এবং কলাম (columns) আকারে সাজায়।
তুমি এটা এমনভাবে ভাবতে পারো:
পুরো স্ক্রিন একটা গ্রিডের মতো,
যেখানে প্রত্যেকটা ছোট ঘর (cell) এর মধ্যে তুমি যেকোনো View রাখতে পারো — যেমন Button, TextView ইত্যাদি।
🎨 GridLayout-এর মূল বৈশিষ্ট্য
| বৈশিষ্ট্য | ব্যাখ্যা |
|---|---|
| গ্রিড ভিত্তিক লেআউট | UI কে সারি ও কলামে ভাগ করে |
| Child view গুলো নির্দিষ্ট cell-এ বসানো হয় | row ও column দিয়ে অবস্থান নির্ধারণ করা হয় |
| Child view একাধিক cell জুড়ে থাকতে পারে | rowSpan ও columnSpan ব্যবহার করে |
| Orientation থাকতে পারে | Horizontal বা Vertical |
| Flexibility বেশি | TableLayout এর চেয়ে বেশি control দেয় |
⚙️ কাজের ধরন
GridLayout মূলত একটা "invisible grid" তৈরি করে —
যেখানে "infinitely thin lines" দিয়ে জায়গাগুলোকে cells হিসেবে ভাগ করা হয়।
তুমি প্রত্যেকটা View কোথায় থাকবে সেটা row ও column দিয়ে বলতে পারো।
🧩 যদি row/column না দাও তাহলে কী হয়?
যদি তুমি কোনো child View-এর জন্য
row ও column নির্দিষ্ট না করো,
তাহলে GridLayout নিজেই স্বয়ংক্রিয়ভাবে সেটার অবস্থান ঠিক করে নেয়।
এটা নির্ভর করে তিনটি property-এর ওপর 👇
| Property | কাজ |
|---|---|
| orientation | horizontal হলে grid বাম-থেকে-ডানে ভরে, vertical হলে উপর-থেকে-নিচে |
| rowCount | মোট কয়টি সারি থাকবে |
| columnCount | মোট কয়টি কলাম থাকবে |
📄 একটি উদাহরণ
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:rowCount="2"
android:columnCount="3"
android:orientation="horizontal"
android:padding="10dp">
<Button
android:text="1" />
<Button
android:text="2" />
<Button
android:text="3" />
<Button
android:text="4" />
<Button
android:text="5" />
<Button
android:text="6" />
</GridLayout>
🔍 ব্যাখ্যা:
এখানে GridLayout-এর rowCount = 2, columnCount = 3
-
orientation হলো horizontal
-
তাই GridLayout নিজেই child গুলিকে স্বয়ংক্রিয়ভাবে cell-এ সাজাবে 👇
1 | 2 | 3
---------
4 | 5 | 6
তুমি কোনো row/column index দাওনি — GridLayout নিজেই সাজিয়ে দিয়েছে।
🧮 নির্দিষ্ট cell-এ বসাতে চাইলে
যদি তুমি চাও কোনো View নির্দিষ্ট cell-এ যাক, তাহলে
layout_row এবং layout_column attribute ব্যবহার করো 👇
<Button
android:text="Click Me"
android:layout_row="1"
android:layout_column="2" />
👉 এই Button যাবে দ্বিতীয় row, তৃতীয় column-এ (count শুরু হয় 0 থেকে)।
🧠 একাধিক cell জুড়ে View রাখতে চাইলে
তুমি layout_rowSpan বা layout_columnSpan ব্যবহার করতে পারো 👇
<Button
android:text="Big Button"
android:layout_rowSpan="2"
android:layout_columnSpan="2" />
👉 এই বাটন ২টা row এবং ২টা column জুড়ে থাকবে।
🧾 GridLayout vs TableLayout (তুলনা)
| বিষয় | GridLayout | TableLayout |
|---|---|---|
| Flexibility | বেশি (exact control) | কম |
| View positioning | নির্দিষ্ট row/column দেওয়া যায় | স্বয়ংক্রিয়ভাবে সাজায় |
| Spanning (merge) | সহজে করা যায় | layout_span দিয়ে করতে হয় |
| Performance | ভালো | তুলনামূলক ধীর |
| Modern UI এর জন্য উপযোগী | ✅ | ❌ |
🎯 সংক্ষেপে মনে রাখো
| বিষয় | মানে |
|---|---|
| GridLayout | স্ক্রিনকে গ্রিড আকারে ভাগ করে |
| Cell | প্রতিটি ঘর যেখানে View বসে |
| rowCount / columnCount | কত সারি ও কলাম থাকবে |
| layout_row / layout_column | নির্দিষ্ট cell নির্ধারণ |
| rowSpan / columnSpan | একাধিক cell জুড়ে রাখা |
| orientation | বাম-থেকে-ডানে বা উপর-থেকে-নিচে সাজানো |