선형 레이아웃에서 버튼 중앙에


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
가로 정렬이있는 LinearLayout에서 나를 위해 layout_width고친 것은 "wrap_content" 로 설정 되었습니다. 결과적 layout_gravity으로해야 할 일을했습니다!
누군가 어딘가에

LinearLayout을 엄격하게 사용해야하는 경우 다음과 같이 작동한다고 생각합니다. stackoverflow.com/questions/18051472/…
Antonio

답변:


373

화면 가운데에 항목을 중앙에 배치하려면 LinearLayout여러 항목을 한 행에 표시하기 위해 a 를 사용하지 마십시오 .

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을 사용 하고 LinearLayout의 중심에 배치하는 방법 이 아닌 경우 사용하는 것이 좋습니다 .
stevebot

RelativeLayout은 치수를 측정해야하는 방식으로 인해 런타임에 훨씬 더 집중적이며 LinearLayout은 매우 간단하고 훨씬 효율적이라는 사실은 말할 것도 없습니다.
Trevor Hart

436

LinearLayout을 사용하여 중심 :

<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에 비해 단순하고 가벼우 며 조금 더 빠릅니다.
SurlyDre

3
중력 대신 layout_gravity를 사용하고있었습니다. android : gravity = "center"로 변경하면이 문제가 해결되었습니다. 신인 실수.
ackushiw

@ackushiw도 내 문제였습니다!
데니

적어도 나를 위해 android : gravity = "center"LinearLayout 속성이 트릭을 수행했습니다. 고마워 친구!
tthreetorch

42

이미지에서 android:gravity="center_vertical|center_horizontal"레이아웃 내부를 정의 하고 설정해 보셨습니까 android:layout_weight="1"?


2
나는이 옵션을 좋아한다. (단 android:weight="1", 버튼을 중앙에 놓을 필요는 없었 습니다.)
Sébastien

4
android : gravity는 가로 LinearLayout에서 작동하지 않지만 android : layout_gravity는 작동합니다.
jfritz42

35

선형 레이아웃에서 작동하는 일반적으로 사용되는 방법은 이미지 버튼에서 속성을 설정하는 것입니다

android:layout_gravity="center"

선형 레이아웃에서 각 객체를 왼쪽 정렬, 가운데 정렬 또는 오른쪽 정렬할지 선택할 수 있습니다. 위의 줄은 정확히

android:layout_gravity="center_vertical|center_horizontal"

4
부모 레이아웃에 android : gravity = "center"속성을 추가하십시오-버튼 (자식 구성 요소)이 있습니다.
Shekh Akther

또한 android.orientation = "vertical"과 부모의 layout_gravity, 즉 LInearLayout 요소가 필요합니다.
Joe Healy


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 : layout_gravity 의 XML 속성에 대한 Android 문서에 따라 쉽게 할 수 있습니다. :)

<?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
android : layout_gravity = "center"는 잘 작동합니다 :) 감사합니다!
Amine Soumiaa

1

true로 설정 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

사용하다

android : layout_centerHorizontal = "true"


1
실제로 vogon101 인 RelativeLayout의 유효한 특성입니다. :) 사용자가 LinearLayout을 사용하고 수직 및 수평으로 중앙에 배치하기를 원했기 때문에 질문에 대답하지 않습니다.
사라

-7

상대 레이아웃을 사용하는 것이 더 쉬울 것이지만 선형 레이아웃의 경우 너비가 부모와 일치하는지 확인하여 중심을 잡습니다.

    android:layout_width="match_parent"

그런 다음 오른쪽과 왼쪽에 여백을 지정하십시오.

    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.