[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>
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) 자신이 가지고 있는 스마트폰 안드로이드 버전 알아내는 방법 (0) | 2015.05.30 |
---|---|
안드로이드(Android) 스마트폰 가로, 세로 상태 알아내는 방법 (1) | 2015.05.28 |
안드로이드(Android) Genymotion 지니모션 이클립스에서 프로젝트 연결하는 방법 (1) | 2015.05.27 |
안드로이드(Android) Genymotion 지니모션 설치와 이클립스 플러그인 설치해서 연결 (1) | 2015.05.19 |
안드로이드(Android) PreferenceActivity 에서 addPreferenceFromResource (0) | 2015.04.29 |
안드로이드(Android) EditTextPreference 이용해서 옵션값 셋팅하는 방법 (1) | 2015.04.20 |
안드로이드(Android) PreferenceActivity 이용해서 사용자 정보 셋팅과 정보가져오기 (0) | 2015.03.26 |
안드로이드(Android) 스마트폰 맥주소(Mac Address) 확인하는 방법 (1) | 2015.03.09 |