LinearLayout को उसके माता-पिता के केंद्र में कैसे संरेखित करें?


80

मैंने एसओ पर कई समान प्रश्नों के माध्यम से देखा है, लेकिन कुछ भी मदद नहीं करता है। मेरे पास अलग-अलग नेस्टेड लेआउट का एक पदानुक्रम है, सभी में है android:layout_width="fill_parent", और आंतरिक-सबसे लेआउट में है android:layout_width="wrap_content- मुझे इसे केंद्र में (क्षैतिज रूप से) संरेखित करने की आवश्यकता है। मैं उसको कैसे करू?

अपडेट:: मैंने समस्या का कारण ढूंढ लिया है - अगर मैंने इनर लीनियर लयआउट को रिलेटिव लियूट में डाल दिया android:layout_width="fill_parent", तो यह अभी भी कंटेंट को लपेटता है। हालाँकि, TableRow, वास्तव में स्क्रीन को भर रहा है।

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
        <TableLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
            <TableRow >
            <LinearLayout 
            android:orientation="horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
                    <TextView
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:text="1"
                    android:textAppearance="?android:attr/textAppearanceLarge" />

                     <TextView
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:text="2"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
             </LinearLayout>
           </TableRow>
        </TableLayout>
    </FrameLayout>
</LinearLayout>

जवाबों:


231

ये दो विशेषताएं आमतौर पर भ्रमित हैं:

  • android:gravity यह जिस सामग्री पर प्रयोग किया जाता है, उसकी सामग्री का गुरुत्वाकर्षण सेट करता है।
  • android:layout_gravityअपने माता-पिता के सापेक्ष दृश्य या लेआउट का गुरुत्वाकर्षण सेट करता है ।

तो या तो android:gravity="center"माता-पिता पर डालें या android:layout_gravity="center"फिर लिनलेयआउट पर ही।

मैंने खुद को कई बार उन्हें मिलाकर देखा है और सोच रहा है कि चीजें ठीक से केंद्रित क्यों नहीं हो रही थीं ...


1
मैंने android:layout_gravity="center"उस लेआउट के लिए कोशिश की है जिसमें TextViews शामिल हैं - मदद नहीं करता है, यह अभी भी बाईं ओर संरेखित है। साथ ही इस लेआउट की चौड़ाई wrapऔर fill- कोई अंतर नहीं है।
वायलेट जिराफ

1
क्या आपने ग्रहण में पिक्सेल परफेक्ट टूल का उपयोग करने की कोशिश की है? यह आपको आपके ऐप के लाइव संस्करण पर लेआउट पर सीमाओं को दिखाता है, इसलिए आप आमतौर पर यह पता लगा सकते हैं कि आप कहां गलत हो गए हैं।
jkschneider

+1 तत्व और माता-पिता द्वारा "गुरुत्वाकर्षण" के उपयोग के बीच भ्रामक अंतर को समझाने के लिए।
स्कटमोई

+1 coz यह मेरी समस्या को हल करता है। मेरा उदाहरण => मेरे पास एक रेखीय लेआउट है, और इसमें एक टेक्स्टव्यू है। यह टेक्सव्यू के लिए काम करता है। यह क्षैतिज रूप से ट्विस्ट करता है।
एलिकेनब्यूरेट

LinearLayout के लिए कोई भी लेआउट_ग्रेविटी नहीं है
Sayka

15

कृपया इसे अपने रैखिक लेआउट में आज़माएँ

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

2
ये पैरामीटर RelativeLayout के लिए हैं
danijax

2
ये लीनियर लेआउट
परम

रैखिक लेआउट में इसका उपयोग नहीं कर सकते।
क्रिस्टोफर स्मिट

10
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
    <LinearLayout 
            android:orientation="horizontal"
            android:layout_centerHorizontal="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TextView
                 android:layout_height="wrap_content"
                 android:layout_width="wrap_content"
                 android:text="1"
                 android:textAppearance="?android:attr/textAppearanceLarge" />

           <TextView
                 android:layout_height="wrap_content"
                 android:layout_width="wrap_content"
                 android:text="2"
                 android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>
</RelativeLayout>

लिपटलेयूट के ऊपर सापेक्ष लिपटेपन पर विचार करें। android:layout_centerHorizontal="true"दृश्य केंद्र को क्षैतिज स्थिति देगा।


पहले से ही कोशिश की है कि। यह काम नहीं करता है! मुझे समझ नहीं आ रहा है कि वहाँ क्या हो रहा है ... मैंने अपने XML का पूरा कोड पोस्ट किया है, मैंने केवल कुछ अन्य तालिका पंक्तियों को ट्रिम किया है। मेरे लेआउट में क्या गलत है?
वायलेट जिराफ़

यह तालिका के साथ कुछ करना है मुझे लगता है, वे बच्चों को बाईं ओर जोड़ते हैं। तालिका पंक्ति टैग के लिए लेआउट_अवेशन = "fill_parent" देने पर विचार करें।
यशवंत कुमार

इस जवाब में xml सेटअप के लिए, अभी भी चल रहा है, तो समस्याओं फिर से जाँच LinearLayoutकी layout_widthहै जो होना चाहिए wrap_contentऔर नहीं match_parent। समान तर्क लंबवत संरेखण के लिए लागू होता है
केलॉग्स

5

माता-पिता के लेआउट में जोड़ें layout_gravity="center"या "center_horizontal"

एक तरफ ध्यान दें, अपने LinearLayoutअंदर अपने आप को TableRowजरूरी लगता है, के रूप में एक TableRowपहले से ही एक क्षैतिज है LinearLayout


यह neccessary है, क्योंकि मुझे माता-पिता को भरने के लिए तालिका की आवश्यकता है और केवल कई पंक्तियों को केंद्रित करना है। और Layout_gravity मदद नहीं करता है।
वायलेट जिराफ

3

इसे इस्तेमाल करे:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
        <TableLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
            <TableRow >
            <LinearLayout 
            android:orientation="horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal" 
                    android:layout_gravity="center_horizontal" >
                    <TextView
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:text="1"
                    android:textAppearance="?android:attr/textAppearanceLarge" />

                     <TextView
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:text="2"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
             </LinearLayout>
           </TableRow>
        </TableLayout>
    </FrameLayout>
</LinearLayout>

3

इसने मेरे लिए काम किया .. खाली दृश्य जोड़कर ..

<LinearLayout
       android:layout_width="match_parent"
        android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
        android:orientation="horizontal"
         >
<View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            />  
     <com.google.android.gms.ads.AdView

         android:id="@+id/adView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"

         android:layout_gravity="center_horizontal"
         ads:adSize="BANNER"
         ads:adUnitId="@string/banner_ad_unit_id" >

    </com.google.android.gms.ads.AdView>
    <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            />  
    </LinearLayout>

2

आज़माएँ <TableRow android:gravity="center_horizontal">यह टैबलाइनर के भीतर के रैखिक लिंकआउट को केंद्र में रखेगा।


2

कस्टम अधिसूचना डिज़ाइन करते समय मैंने उसी स्थिति का सामना किया है। मैंने निम्नलिखित विशेषता सेट के साथ कोशिश की है।

 android:layout_centerInParent.

2

यह मेरे लिए काम किया।

<LinearLayout>
.
.
.
android:gravity="center"
.
.>

<TextView
android:layout_gravity = "center"
/>
<Button
android:layout_gravity="center"
/>

</LinearLayout>

इसलिए आप रेखीय लेआउट को उसके केंद्र में उसकी सभी सामग्री (TextView और Button) रखने के लिए डिज़ाइन कर रहे हैं और फिर TextView और बटन को रैखिक लेआउट के केंद्र के सापेक्ष रखा गया है


1

@jksschneider की खोज लगभग सही है। सुनिश्चित करें कि आपने कोई भी gravityमूल लेआउट सेट नहीं किया है , और फिर layout_gravity="center"अपने दृश्य या लेआउट पर सेट करें।


1

नेस्टेड रिलेटिवलैट्स के साथ काम करते हुए मैंने इसका अनुभव किया। मेरा समाधान सरल होने के साथ समाप्त हो गया, लेकिन यह एक छोटा सा गेटचा है जिसके बारे में पता होना चाहिए।

मेरे लेआउट के साथ परिभाषित किया गया था ...

android:layout_height="fill_parent"
android:layout_below="@id/someLayout
android:gravity="center"

... हालाँकि, मुझे नहीं लगा कि इसके नीचे का लेआउट इसके ऊपर रखा गया था। इस लेआउट के अंदर सब कुछ केंद्रित की बजाय नीचे की ओर स्थानांतरित कर दिया गया। जोड़ रहा है ...

android:layout_above="@id/bottomLayout"

... मेरा मुद्दा ठीक किया।


0

ImageView या अन्य विचारों के लिए जो लेआउट-ग्रेविटी या गुरुत्वाकर्षण मौजूद नहीं हैं: android:layout_centerInParent="true"बच्चे में (मेरे पास एक बच्चे के रूप में ImageView के साथ एक सापेक्ष लेआउट था)।


0

समस्या यह है कि रूट (मुख्य लेआउट जिसे आप अन्य तत्वों को संग्रहीत करते हैं) गुरुत्वाकर्षण सेट नहीं है। आप के लिए इसे बदल अगर केंद्र अन्य तत्वों 'गुरुत्वाकर्षण ठीक काम करना चाहिए।


0

नीचे अपने रेखीयआउट को नीचे रखने के लिए और इसकी सामग्री को केंद्र में रखने के लिए कोड है। आपको नीचे लेआउट सेट करने के लिए RelativeLayout का उपयोग करना होगा।

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#97611F"
    android:gravity="center_horizontal"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:text="View Saved Searches"
        android:textSize="15dp"
        android:textColor="#fff"
        android:gravity="center_vertical"
        android:visibility="visible" />
    <TextView
        android:layout_width="30dp"
        android:layout_height="24dp"
        android:text="12"
        android:textSize="12dp"
        android:textColor="#fff"
        android:gravity="center_horizontal"
        android:padding="1dp"
        android:visibility="visible" />
  </LinearLayout>  
</RelativeLayout>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.