रैखिक लेआउट में एक बटन केंद्र


338

मैं एक सुंदर प्रकाश प्रारंभिक स्क्रीन प्रदर्शित करने के लिए एक रैखिक लेआउट का उपयोग कर रहा हूं। इसमें 1 बटन होता है जिसे क्षैतिज और लंबवत रूप से स्क्रीन में केंद्रित किया जाता है। हालाँकि मैं जो भी करने की कोशिश करूँगा बटन को केंद्र में संरेखित करेगा। मैंने नीचे XML को शामिल किया है, क्या कोई मुझे सही दिशा में इंगित कर सकता है?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        android:background="@drawable/findme"></ImageButton>

</LinearLayout>

6
क्षैतिज संरेखण के साथ एक रैखिकलेयआउट में मेरे लिए यह तय किया गया था layout_widthकि "रैप_ कॉन्टेंट" पर सेट किया जाए। बाद में layout_gravityवही किया जो करना चाहिए था!
किसी को

यदि आपको सख्ती से LinearLayout का उपयोग करने की आवश्यकता है, तो मुझे लगता है कि यह काम करना चाहिए: stackoverflow.com/questions/18051472/…
एंटोनियो

जवाबों:


373

यदि आप स्क्रीन के बीच में किसी आइटम को केंद्र में रखना चाहते हैं तो LinearLayoutइनका उपयोग न करें क्योंकि ये एक पंक्ति में कई आइटम प्रदर्शित करने के लिए हैं।

RelativeLayoutइसके बजाय प्रयोग करें ।

इसलिए प्रतिस्थापित करें:

android:layout_gravity="center_vertical|center_horizontal"

प्रासंगिक RelativeLayoutविकल्प के लिए:

android:layout_centerInParent="true"

तो आपकी लेआउट फ़ाइल इस तरह दिखाई देगी:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/findme"></ImageButton>

</RelativeLayout>

38
ऐसे उदाहरण हैं जहां आपको LinearLayout और केंद्र सामग्री का उपयोग करने की आवश्यकता है। यह स्वीकृत उत्तर नहीं होना चाहिए। यदि संभव हो तो RelativeLayout का उपयोग करने का सुझाव देना बेहतर होगा, और यदि लिनियरलैट में केंद्र में नहीं है तो कैसे करें।
18:15

इस तथ्य का उल्लेख नहीं करने के लिए कि जिस तरह से उनके आयामों को मापा जाना है, उसके कारण एक RelativeLayout अधिक रनटाइम गहन है, जबकि एक LinearLayout सुपर सीधा और बहुत अधिक कुशल है।
ट्रेवर हार्ट

436

रैखिकलेयआउट का उपयोग कर केंद्र:

<LinearLayout
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/btnFindMe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/findme" />
</LinearLayout>

11
LinearLayout एक RelativeLayout की तुलना में सरल और हल्का है, थोड़ा तेज होना चाहिए।
सुरीलेड्रे

3
मैं गुरुत्वाकर्षण के बजाय लेआउट_ग्रेविटी का उपयोग कर रहा था। एंड्रॉइड में बदलना: गुरुत्वाकर्षण = "केंद्र" ने मेरे लिए इसे निर्धारित किया। बदमाशों की गलती
एककुशी

@ackushiw भी मेरी समस्या थी!
डेनी

कम से कम मेरे लिए Android: गुरुत्वाकर्षण = "केंद्र" LinearLayout विशेषता ने चाल चली। धन्यवाद भाई!
tthreetorch

42

क्या आपने छवि में android:gravity="center_vertical|center_horizontal"लेआउट और सेटिंग के अंदर परिभाषित करने की कोशिश की है android:layout_weight="1"?


2
मुझे यह विकल्प पसंद है जो मुझे mi LinearLayout रखने देता है! ( android:weight="1"हालांकि मुझे इसे केंद्र में रखने के लिए बटन में सेट नहीं करना था ।)
सेबास्टियन

4
Android: गुरुत्वाकर्षण मेरे लिए एक क्षैतिज LinearLayout में काम नहीं करता है, लेकिन Android: layout_gravity करता है।
jfritz42

35

एक सामान्य रूप से उपयोग की जाने वाली विधि जो रैखिक लेआउट के साथ काम करती है, छवि बटन पर एक संपत्ति सेट करना है

android:layout_gravity="center"

आप रैखिक लेआउट में प्रत्येक ऑब्जेक्ट को बाएं-संरेखित, केंद्र-संरेखित, या दाएं-संरेखित कर सकते हैं। ध्यान दें कि उपरोक्त पंक्ति ठीक उसी प्रकार है जैसे कि

android:layout_gravity="center_vertical|center_horizontal"

4
अभिभावक लेआउट में Android: गुरुत्वाकर्षण = "केंद्र" गुण जोड़ें - जो आपके बटन (बाल घटकों) को रखता है।
शेख अख्तार

आपको android.orientation = "वर्टिकल" प्लस की भी जरूरत है, पैरेंट_गर्भावस्था में पैरेंट, उर्फ़ द लेयर लयआउट तत्व ....
जो हीली


8

यदि आप उपयोग LinearLayoutकरते हैं तो आप गुरुत्वाकर्षण केंद्र जोड़ सकते हैं:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">
            <Button
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            />
</LinearLayout>`

7

इसके साथ आसान है

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:visibility="visible" 
        android:gravity="center"
        android:orientation="vertical" >

        <ProgressBar
            android:id="@+id/pbEndTrip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="Gettings" />
    </LinearLayout>


5
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:layout_gravity = "center"
        android:background="@drawable/findme">
    </ImageButton>

</LinearLayout>

उपरोक्त कोड काम करेगा।


2

मेरी मशीन से पूरा और काम करने का नमूना ...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity"
    android:gravity="center"
    android:textAlignment="center">


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="My Apps!"
        android:id="@+id/textView"
        android:gravity="center"
        android:layout_marginBottom="20dp"
     />

    <Button
        android:layout_width="220dp"
        android:layout_height="wrap_content"
        android:text="SPOTIFY STREAMER"
        android:id="@+id/button_spotify"
        android:gravity="center"
        android:layout_below="@+id/textView"
        android:padding="20dp"
        />

    <Button
        android:layout_width="220dp"
        android:layout_height="wrap_content"
        android:text="SCORES"
        android:id="@+id/button_scores"
        android:gravity="center"
        android:layout_below="@+id/textView"
        android:padding="20dp"
        />


    <Button
        android:layout_width="220dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="LIBRARY APP"
        android:id="@+id/button_library"
        android:gravity="center"
        android:layout_below="@+id/textView"
        android:padding="20dp"
        />

    <Button
        android:layout_width="220dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="BUILD IT BIGGER"
        android:id="@+id/button_buildit"
        android:gravity="center"
        android:layout_below="@+id/textView"
        android:padding="20dp"
        />

    <Button
        android:layout_width="220dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="BACON READER"
        android:id="@+id/button_bacon"
        android:gravity="center"
        android:layout_below="@+id/textView"
        android:padding="20dp"
        />

    <Button
        android:layout_width="220dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="CAPSTONE: MY OWN APP"
        android:id="@+id/button_capstone"
        android:gravity="center"
        android:layout_below="@+id/textView"
        android:padding="20dp"
        />

</LinearLayout>


आप केवल RelativeLayout के भाई-बहनों पर 'android: layout_below' का उपयोग कर सकते हैं
जैज़

2

Android के XML एट्रिब्यूट्स के लिए Android डॉक्यूमेंट के अनुसार : layout_gravity , हम इसे आसानी से कर सकते हैं :)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageButton android:id="@+id/btnFindMe" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"

        android:layout_gravity="center"

        android:background="@drawable/findme"></ImageButton>

</LinearLayout>

1
एंड्रॉइड: लेआउट_ग्रेविटी = "केंद्र" ठीक काम करता है :) धन्यवाद!
अमीन सौमिया

1

इस तरह से ट्रू android:layout_alignParentTop="true"और android:layout_centerHorizontal="true"बटन पर सेट करें:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
     <Button
        android:id="@+id/switch_flashlight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/turn_on_flashlight"
        android:textColor="@android:color/black"
        android:onClick="action_trn"
        android:background="@android:color/holo_green_light"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:padding="5dp" />
</RelativeLayout>

यहां छवि विवरण दर्ज करें


0

आप इस कोड को भी आज़मा सकते हैं:

<LinearLayout
            android:id="@+id/linear_layout"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:orientation="horizontal"
            android:weightSum="2.0"
            android:background="@drawable/anyBackground" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="vertical"
            android:layout_weight="1" >

            <ImageView
                android:id="@+id/img_mail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@drawable/yourImage" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="vertical"
            android:layout_weight="1" >



<ImageView
            android:id="@+id/img_save"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:background="@drawable/yourImage" />
        </LinearLayout>
        </LinearLayout>

क्या आप बता सकते हैं कि यह पहले से उपलब्ध उत्तरों से कैसे अलग है?
EWit

0

बस का उपयोग करें (अपने लेआउट के केंद्र में बनाने के लिए)

        android:layout_gravity="center" 

और उपयोग करें

         android:layout_marginBottom="80dp"

         android:layout_marginTop="80dp"

पोस्ट बदलने के लिए


0

तुम भी करने के लिए LinearLayout की चौड़ाई निर्धारित कर सकते हैं wrap_contentऔर उपयोग android:layout_centerInParent, android:layout_centerVertical="true":

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
>

<ImageButton android:id="@+id/btnFindMe" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"       
    android:background="@drawable/findme"/>


0

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

android:layout_alignParentEnd="true"

-2

क्या आपने यह कोशिश की?

  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout" android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5px"
android:background="#303030"
>
    <RelativeLayout
    android:id="@+id/widget42"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    >
    <ImageButton
    android:id="@+id/map"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="map"
    android:src="@drawable/outbox_pressed"
    android:background="@null"
    android:layout_toRightOf="@+id/location"
    />
    <ImageButton
    android:id="@+id/location"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="location"
    android:src="@drawable/inbox_pressed"
    android:background="@null"
    />
    </RelativeLayout>
    <ImageButton
    android:id="@+id/home"
    android:src="@drawable/button_back"
    android:background="@null"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    />
</RelativeLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5px"
android:orientation="horizontal"
android:background="#252525"
>
    <EditText
    android:id="@+id/searchfield"
    android:layout_width="fill_parent"
    android:layout_weight="1"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:background="@drawable/customshape"
    />
    <ImageButton
    android:id="@+id/search_button"
    android:src="@drawable/search_press"
    android:background="@null"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    />
</LinearLayout>
<com.google.android.maps.MapView
    android:id="@+id/mapview" 
    android:layout_weight="1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:clickable="true"
    android:apiKey="apikey" />

</TableLayout>

-2

उपयोग

एंड्रॉयड: layout_centerHorizontal = "true"


1
वास्तव में vogon101, यह एक RelativeLayout में एक वैध संपत्ति है। :) यह सवाल का जवाब नहीं देता है, हालांकि, क्योंकि उपयोगकर्ता LinearLayout का उपयोग कर रहा था और दोनों लंबवत और क्षैतिज रूप से केंद्र करना चाहता था।
सारा

-7

रिश्तेदार लेआउट का उपयोग करना आसान होगा, लेकिन रैखिक लेआउट के लिए मैं आमतौर पर यह सुनिश्चित करके केंद्र बनाता हूं कि चौड़ाई माता-पिता से मेल खाती है:

    android:layout_width="match_parent"

और फिर उसी के अनुसार दाएं और बाएं को मार्जिन दें।

    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.