त्वरित सारांश
| विशेषता | gravity | layout_gravity |
|---|---|---|
| लागू होता है | व्यू के अंदर कंटेंट पर | व्यू को पेरेंट के अंदर पोजिशन करता है |
| एनालॉजी | बॉक्स के अंदर टेक्स्ट संरेखण | कंटेनर में बॉक्स की स्थिति |
| पेरेंट आवश्यकता | कोई विशेष नहीं | पेरेंट LinearLayout/FrameLayout होना चाहिए |
gravity (एंड्रॉइड:ग्रेविटी)
व्यू के आंतरिक कंटेंट को संरेखित करता है। TextView, Button, EditText जैसे व्यूज़ पर लागू होता है जिनके अंदर कंटेंट होता है।
सामान्य मान
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#E0E0E0"
android:gravity="center" />
<!-- अन्य मान -->
android:gravity="top|start" // ऊपर-बाएं
android:gravity="bottom|end" // नीचे-दाएं
android:gravity="center_vertical" // लंबवत केंद्र
android:gravity="center_horizontal" // क्षैतिज केंद्र
android:gravity="fill" // भरें (टेक्स्ट के लिए कम उपयोगी)
android:gravity="clip_vertical" // लंबवत क्लिप
android:gravity="clip_horizontal" // क्षैतिज क्लिप
व्यावहारिक उदाहरण
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<!-- gravity: कंटेंट संरेखण -->
<Button
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="#2196F3"
android:gravity="left|center_vertical"
android:text="गुरुत्वाकर्षण: left|center_vertical"
android:textColor="#FFF" />
<Button
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginTop="8dp"
android:background="#4CAF50"
android:gravity="center"
android:text="गुरुत्वाकर्षण: center"
android:textColor="#FFF" />
<Button
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginTop="8dp"
android:background="#FF9800"
android:gravity="right|center_vertical"
android:text="गुरुत्वाकर्षण: right|center_vertical"
android:textColor="#FFF" />
</LinearLayout>
layout_gravity (एंड्रॉइड:लेआउट_ग्रेविटी)
व्यू को अपने पेरेंट कंटेनर के अंदर पोजिशन करता है। केवल LinearLayout, FrameLayout, GridLayout जैसे ViewGroup बच्चों पर काम करता है।
LinearLayout में व्यवहार
- Vertical LinearLayout: horizontal gravity काम करता है (left, center, right)
- Horizontal LinearLayout: vertical gravity काम करता है (top, center, bottom)
<!-- Vertical LinearLayout: layout_gravity क्षैतिज स्थिति नियंत्रित करता है -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:text="Start (बाएं)" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_gravity="center_horizontal"
android:text="Center Horizontal" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_gravity="end"
android:text="End (दाएं)" />
</LinearLayout>
FrameLayout में व्यवहार
FrameLayout में layout_gravity दोनों दिशाओं में काम करता है:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#F5F5F5">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|start"
android:text="Top-Start" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Center" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:text="Bottom-End" />
</FrameLayout>
संयुक्त उदाहरण: दोनों एक साथ
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"
android:background="#E8EAF6"
android:padding="16dp">
<!-- पेरेंट में केंद्र, अंदर भी केंद्र -->
<Button
android:layout_width="150dp"
android:layout_height="80dp"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:background="#3F51B5"
android:text="layout_gravity: center_h\ngravity: center"
android:textColor="#FFF" />
</LinearLayout>
प्रोग्रामेटिक सेटिंग
// Gravity (कंटेंट संरेखण)
textView.setGravity(Gravity.CENTER);
button.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
// LayoutParams के माध्यम से layout_gravity
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
params.gravity = Gravity.END; // या Gravity.CENTER_HORIZONTAL, आदि
view.setLayoutParams(params);
// FrameLayout के लिए
FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
frameParams.gravity = Gravity.BOTTOM | Gravity.END;
view.setLayoutParams(frameParams);
सामान्य गलतियाँ
- ConstraintLayout में layout_gravity: काम नहीं करता! ConstraintLayout में
layout_constraintStart_toStartOf,layout_constraintTop_toTopOf, आदि उपयोग करें - match_parent के साथ layout_gravity: अगर width/height match_parent है, तो layout_gravity का कोई प्रभाव नहीं (पह से ही भरता है)
- RelativeLayout: layout_gravity समर्थित नहीं, नियम उपयोग करें (
layout_alignParentStart, आदि)
याद रखने का सरल नियम
gravity = "मेरे अंदर क्या है उसे कैसे संरेखित करूं?"
layout_gravity = "मेरे पेरेंट में मुझे कहां रखूं?"