एंड्रॉइड Layout में match_parent vs wrap_content — पूरा अंतर समझाया गया
ये दो सबसे मौलिक लेआउट चौड़ाई/ऊंचाई मोड हैं जो हर एंड्रॉइड डेवलपर को पता होने चाहिए। नोट: fill_parent API लेवल 8 (Android 2.2) में डिप्रिकेटेड हो गया था — इसका आधुनिक नाम match_parent है। दोनों समान व्यवहार करते हैं।
त्वरित तुलना
| विशेषता | match_parent (पूर्व fill_parent) | wrap_content |
|---|---|---|
| अर्थ | पैरेंट व्यू जितना बड़ा बने | अपने कंटेंट जितना बड़ा बने |
| चौड़ाई/ऊंचाई | पैरेंट के उपलब्ध स्थान को भरता है | कंटेंट (टेक्स्ट, इमेज, चाइल्ड व्यूज) को फिट करता है |
| पैरेंट पर निर्भरता | हां — पैरेंट का आकार जानना जरूरी | नहीं — केवल अपने कंटेंट पर निर्भर |
| सामान्य उपयोग | फुल-स्क्रीन कंटेनर, ListView/RecyclerView, बैकग्राउंड | बटन, टेक्स्ट व्यू, इमेज, छोटे कंपोनेंट्स |
| प्रदर्शन | थोड़ा अधिक मेजरमेंट पास | तेज़ — केवल अपना कंटेंट मापता है |
दृश्य उदाहरण
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<!-- match_parent: पूरी चौड़ाई लेगा -->
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="MATCH_PARENT (पूरी चौड़ाई)"
android:background="#2196F3"
android:textColor="#FFF" />
<Space android:layout_width="match_parent" android:layout_height="16dp" />
<!-- wrap_content: केवल टेक्स्ट जितना चौड़ा -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="WRAP_CONTENT"
android:background="#4CAF50"
android:textColor="#FFF" />
<Space android:layout_width="match_parent" android:layout_height="16dp" />
<!-- नेस्टेड: पैरेंट wrap_content, चाइल्ड match_parent -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#FFEB3B"
android:padding="16dp">
<TextView
android:layout_width="match_parent" <!-- पैरेंट (wrap_content) जितना -->
android:layout_height="wrap_content"
android:text="पैरेंट wrap_content है, इसलिए मैं भी उतना ही चौड़ा हूं"
android:textColor="#000"
android:background="#FFF9C4"
android:padding="8dp" />
</LinearLayout>
</LinearLayout>
व्यवहार विवरण
1. match_parent (fill_parent)
- पैरेंट के **उपलब्ध स्थान** को पूरी तरह भरता है (पैरेंट के पैडिंग घटाकर)।
- अगर पैरेंट
wrap_contentहै, तो चाइल्ड काmatch_parentपैरेंट के कंटेंट-निर्धारित आकार तक सीमित होता है। - पूर्ण-स्क्रीन लेआउट्स, RecyclerView, फ्रैगमेंट कंटेनर के लिए मानक।
2. wrap_content
- व्यू के **आंतरिक कंटेंट** (टेक्स्ट, ड्रॉएबल, चाइल्ड व्यूज) को फिट करने के लिए न्यूनतम आकार लेता है।
- पैरेंट के आकार पर निर्भर नहीं करता — स्वतंत्र।
- बटन, लेबल, आइकन, कार्ड व्यूज के लिए आदर्श।
नेस्टिंग व्यवहार (महत्वपूर्ण!)
<!-- केस 1: पैरेंट match_parent, चाइल्ड wrap_content -->
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content" ... /> <!-- केवल टेक्स्ट जितना -->
</LinearLayout>
<!-- केस 2: पैरेंट wrap_content, चाइल्ड match_parent -->
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:layout_width="match_parent" ... /> <!-- पैरेंट जितना (जो कंटेंट जितना है) -->
</LinearLayout>
<!-- केस 3: दोनों match_parent -->
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent">
<TextView android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- पूरा स्क्रीन -->
</LinearLayout>
ConstraintLayout में समतुल्य
ConstraintLayout में match_parent/wrap_content सीधे उपयोग नहीं होते। बजाय इसके:
| पारंपरिक | ConstraintLayout समतुल्य |
|---|---|
match_parent | layout_width="0dp" + layout_constraintStart_toStartOf="parent" + layout_constraintEnd_toEndOf="parent" |
wrap_content | layout_width="wrap_content" (काम करता है) |
| वेट/अनुपात | layout_constraintHorizontal_weight + layout_width="0dp" |
प्रदर्शन टिप्स
wrap_contentआमतौर पर तेज़ होता है क्योंकि मेजरमेंट पास सरल होता है।- गहरे नेस्टेड लेआउट्स में
match_parentचेन कई मेजरमेंट पास ट्रिगर कर सकते हैं। ConstraintLayoutफ्लैट हायरार्की के साथ दोनों से बेहतर प्रदर्शन देता है।
सामान्य गलतियाँ
- fill_parent उपयोग करना — डिप्रिकेटेड है,
match_parentलिखें। - RelativeLayout में match_parent पर भरोसा करना जब पैरेंट wrap_content हो — अप्रत्याशित परिणाम।
- ScrollView में match_parent height — ScrollView wrap_content होना चाहिए, चाइल्ड match_parent नहीं (अन्यथा स्क्रॉल नहीं होगा)।
- ImageView में wrap_content + scaleType — स्केल टाइप के आधार पर आकार बदल सकता है,
adjustViewBounds="true"जोड़ें।
सारांश
- 🔵 match_parent = "पैरेंट जितना बड़ा बनो" (पूर्व fill_parent)
- 🟢 wrap_content = "मेरे कंटेंट जितना बड़ा बनो"
- 🎯 सही चुनाव: कंटेनर/फुल-स्क्रीन → match_parent; कंपोनेंट/कंटेंट-ड्रिवन → wrap_content
- ⚡ ConstraintLayout में 0dp + कंस्ट्रेंट्स = match_parent
- 📝 कोड में:
ViewGroup.LayoutParams.MATCH_PARENT(-1),WRAP_CONTENT(-2)