LinearLayout을 부모 중심에 정렬하는 방법은 무엇입니까?


80

여기에서 유사한 질문을 많이 봤지만 도움이되지는 않습니다. 나는 다른 중첩 레이아웃의 계층 구조를 가지고 있으며 모두가 android:layout_width="fill_parent"있고 가장 안쪽 레이아웃에는 android:layout_width="wrap_content중앙 (가로)에 정렬해야합니다. 어떻게하나요?

업데이트 : : 문제의 원인을 찾았습니다-내부 LinearLayout을 RelativeLayout에 넣는 경우 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>

답변:


230

이 두 속성은 일반적으로 혼동됩니다.

  • android:gravity 사용되는 뷰의 콘텐츠 중력을 설정합니다.
  • android:layout_gravity부모를 기준으로 뷰 또는 레이아웃의 중력을 설정합니다 .

따라서 android:gravity="center"부모 또는 android:layout_gravity="center"LinearLayout 자체에 두십시오 .

나는 여러 번 그들을 섞어서 왜 사물이 제대로 중앙에 있지 않은지 궁금해했습니다.


1
android:layout_gravity="center"TextViews가 포함 된 레이아웃을 시도해 보았습니다. 도움이되지 않지만 여전히 왼쪽으로 정렬되어 있습니다. 또한이 레이아웃의 폭을 설정하려고 wrap하고 fill차이가 없습니다 -.
Violet Giraffe

1
Eclipse에서 Pixel Perfect 도구를 사용해 보셨습니까? 앱의 라이브 버전에서 레이아웃의 테두리를 보여 주므로 일반적으로 어디에서 잘못되었는지 파악할 수 있습니다.
jkschneider 2011

요소와 부모가 키워드 "중력"을 사용하는 것 사이의 혼란스러운 차이점을 설명하는 +1.
scatmoi

+1 coz 내 문제를 해결합니다. 내 예 => 선형 레이아웃과 텍스트 뷰가 있습니다. texview에서 작동합니다. tw를 수평으로 중심에 둡니다.
alicanbatur 2013

LinearLayout에 대한
layout_gravity

15

선형 레이아웃에서 이것을 시도하십시오

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

2
이 매개 변수는 RelativeLayout 용입니다
danijax

2
이들은 선형 레이아웃 매개 변수가 아닙니다
pcodex

선형 레이아웃에서는 사용할 수 없습니다.
Christopher Smit

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>

relativeLayout을 LinearLayout보다 래핑하는 것을 고려하십시오. android:layout_centerHorizontal="true"뷰 중심을 수평으로 배치합니다.


이미 시도했습니다. 작동하지 않습니다! 나는 거기에서 무슨 일이 일어나는지 이해하지 못한다. 나는 내 XML의 전체 코드를 게시했고, 다른 테이블 행만 잘라 냈다. 내 레이아웃에 어떤 문제가 있습니까?
Violet Giraffe

그것은 내가 생각하는 테이블 행과 관련이 있으며 왼쪽에 자식을 추가합니다. 테이블 행 태그에 layout_width = "fill_parent"제공을 고려하십시오.
Yashwanth Kumar

이 답변에서 XML 설정에 여전히 가진 경우 문제가 다시 확인 LinearLayoutlayout_width해야 wrap_content하지가 match_parent. 수직 정렬에도 동일한 논리가 적용됩니다.
kellogs

5

layout_gravity="center"또는 "center_horizontal"부모 레이아웃에 추가 합니다.

참고로, a 는 이미 수평이므로 LinearLayout내부 TableRow가 불필요하게 보입니다 .TableRowLinearLayout


부모를 채우기 위해 테이블이 필요하고 중앙에 배치되는 몇 개의 행만 필요하기 때문에 필요합니다. 그리고 layout_gravity는 도움이되지 않습니다.
Violet Giraffe

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

Try <TableRow android:gravity="center_horizontal">This는 테이블 행 내에서 내부 LinearLayout을 중앙에 배치합니다.


2

사용자 지정 알림을 디자인하는 동안 동일한 상황에 직면했습니다. 다음 속성을 true로 설정했습니다.

 android:layout_centerInParent.

2

이것은 나를 위해 일했습니다.

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

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

</LinearLayout>

따라서 모든 콘텐츠 (TextView 및 Button)를 중앙에 배치하도록 선형 레이아웃을 디자인 한 다음 TextView 및 Button은 선형 레이아웃의 중앙에 상대적으로 배치됩니다.


1

@jksschneider 설명이 거의 맞습니다. gravity부모 레이아웃으로 설정하지 않았는지 확인한 다음 layout_gravity="center"보기 또는 레이아웃으로 설정 합니다.


1

중첩 된 RelativeLayouts로 작업하면서 이것을 경험했습니다. 내 솔루션은 간단 해졌지만 알아 두어야 할 약간의 문제입니다.

내 레이아웃은 ...

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

아래는 Linearlayout을 하단에 배치하고 콘텐츠를 중앙에 배치하는 코드입니다. 하단에 레이아웃을 설정하려면 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.