Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

[Android] 안드로이드 레이아웃 gravity, layout_gravity 가 적용이 안되는 경우 해결

 

환경 : Eclipse Mars, Android 4.2.2

 

안드로이드에서 화면에 위젯들을 배치할 때 gravity layout_gravity 을 많이 사용 합니다. 그때 값을 넣었는 데도 생각한 대로 배치가 되지 않을때가 있죠. 이런 대표적인 경우 몇 가지에 대해 설명해 보겠습니다.

 

▼ 아래 XML LinearLayout gravity=”center” 을 설정했습니다. gravity 레이아웃 내부에 있는 위젯들을 정렬하는 옵션입니다. 그러니까 예상대로 라면  ImageView TextView 위젯이 중앙으로 정렬이 되어야 합니다. 그런데 그림처럼 왼쪽으로 몰려 있죠. 왜 그럴까요?

 

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:gravity="center"
    android:background="#FFCC00">

    <ImageView
        android:id="@+id/imgView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#548745"
        android:src="@drawable/ic_launcher" />
    
    <TextView
        android:id="@+id/txtView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00FFFF"
        android:text="gravity로 설정이 안될때 "/>
    
</LinearLayout>

 

 

▼ 아래 XML 은 정상적으로 gravity=”center” 값이 적용될수 있도록 고쳣습니다. 허무하게도 LinearLayout layout_width=”fill_parent” 로 바꾼 것 밖에 없습니다. 이것도 모른다면 엄청난 시간 낭비를 하겠죠. 이렇게 정렬을 하고자 할때는 레이아웃의 크기를 정하던지 fill_parent 로 화면을 꽉 채워야 합니다. wrap_content는 레이아웃에 포함된 컨텐츠의 크기에 맞춰서 늘어나기 때문에 정해진 크기가 없습니다. 그래서 정렬할수 있는 기준이 없는 것입니다.

 

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:gravity="center"
    android:background="#FFCC00">

    <ImageView
        android:id="@+id/imgView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#548745"
        android:src="@drawable/ic_launcher" />
    
    <TextView
        android:id="@+id/txtView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00FFFF"
        android:text="gravity로 설정이 안될때 "/>
    
</LinearLayout>

 

 

▼ 이번에는 두개의 위젯을 왼쪽과 오른쪽으로 배치하기 위해 layout_gravity=left right 를 적용했습니다. 그런데 결과는 왼쪽에서부터 정렬되어 있죠. 부모뷰가 orizontal 일때 내부 위젯의 left, right 는 안되며 bottom, top, center 만 적용이됩니다. 반대의 경우도 마찬가지 입니다. vertical 일때는 left, right 가 적용이 되겠죠.

 

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:background="#FFCC00">

    <ImageView
        android:id="@+id/imgView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#548745"
        android:layout_gravity="left"
        android:src="@drawable/ic_launcher" />
    
    <TextView
        android:id="@+id/txtView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00FFFF"
        android:layout_gravity="right"
        android:text="gravity로 설정이 안될때 "/>
    
</LinearLayout>

 

 

▼ 왼쪽과 오른쪽으로 개별적용을 위해서는 오른쪽으로 보낼 위젯에 레이아웃을 하나 더 씌우시면 됩니다. LinearLayout gravity 속성을 right 로 하시면 내부의 위젯은 오른쪽으로 옮겨 지겠죠.

 

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
    android:background="#FFCC00">

    <ImageView
        android:id="@+id/imgView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#548745"
        android:layout_gravity="left"
        android:src="@drawable/ic_launcher" />
    
    <LinearLayout
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent"
	    android:orientation="horizontal" 
	    android:gravity="right"
	    android:background="#FFCC00">
	    
	    <TextView
	        android:id="@+id/txtView"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:background="#00FFFF"
	        android:text="gravity로 설정이 안될때 "/>
    </LinearLayout>
    
</LinearLayout>

 

 

반응형
Posted by 녹두장군1
,