일반적인 프로그래밍 언어에서 화면에 컨트롤을 배치할 때 제공하는 정렬 기능을 안드로이드에서도 그대로 사용할 수 있습니다. 이 때 사용하는 용어가 안드로이드에서는 조금 다른 것을 볼 수 있는데 일반적인 정렬(align)은 순서대로 놓여 지다는 의미로 이해할 수 있으며, 안드로이드에서 사용하는 배치(gravity)는 어느 쪽에 무게 중심을 놓은 것인가의 의미로 이해할 수 있습니다. 하지만 똑같이 생각해도 상관없습니다. 레이아웃에서 정렬 기능이 필요한 경우는 다음과 같이 두 가지로 나눌 수 있습니다.
정렬 속성 |
설명 |
layout_gravity |
부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않아 여유 공간 안에서 뷰를 정렬할 때 |
gravity |
뷰에서 화면에 표시하는 내용물을 정렬할 때(텍스트뷰의 경우, 내용물은 글자가 되고 이미지뷰의 경우 내용물은 이미지가 됨) |
먼저 부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않을 경우에 사용하는 layout_gravity는 뷰의 layout_width 나 layout_height 속성을 wrap_content로 할 경우에 같이 사용할 수 있습니다. 예를 들어, 세로 방향으로 설정된 리니어 레이아웃에 추가된 버튼들의 layout_width 속성을 wrap_content로 하게 되면 각각의 버튼들은 한 줄에 한 개씩 추가되면서 글자가 보이는 만큼의 크기로만 보이므로 나머지 가로 공간은 여유 공간으로 남게 됩니다. 안드로이드는 이렇게 여유 공간이 있을 경우 디폴트로 왼쪽 정렬을 하게되는데 layout_gravity 속성을 직접 설정하게 되면 중앙 또는 오른쪽 정렬을 할 수 있습니다.
예제를 보도록 하겠습니다.
gravity.xml |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <Button android:id="@+id/button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" android:text="버튼1" />
<Button android:id="@+id/button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="버튼2" />
<Button android:id="@+id/button03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text="버튼3" /> </LinearLayout> |
실행을 해보면 결과는 다음과 같습니다.
뷰에 보이는 내용물을 정렬하는 경우에는 gravity 속성을 사용합니다. gravity 속성은 뷰가 화면에서 차지하는 영역이 충분히 큰 경우에 생기는 여유 공간 안에서 어떻게 정렬할 것인지를 결정합니다. gravity가 적용될 수 있는 대표적인 내용물로는 텍스트뷰 안에 표시되는 텍스트나 이미지뷰에 표시되는 이미지를 들 수 있습니다. gravity 속성에 넣을 수 있는 값들은 layout_gravity와 같으며, 필요한 경우에는 '|' 연산자를 이용해 여러 개의 값을 같이 설정할 수도 있습니다. 이 때 주의할 점은 '|' 연산자 양쪽에 공백이 없어야 한다는 점입니다.
다음은 하나의 텍스트뷰를 화면 전체에 채운 후 그 안에 표시되는 텍스트를 왼쪽 상단, 중앙, 그리고 오른쪽 하단에 표시할 경우에 사용되는 XML 레이아웃으로 각각 'left|top', 'center', 'right|bottom' 값이 설정되었습니다. 예제를 보도록 하겠습니다.
<TextView android:id="@+id/button01" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="left|top" android:text="left|top" /> |
|
<TextView android:id="@+id/button02" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal|center_vertical" android:text="center" /> |
|
<TextView android:id="@+id/button03" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="right|bottom" android:text="right|bottom" /> |
|
gravity 속성으로 지정할 수 있는 값으로는 위와 같이 대표적인 경우 이외에도 여러 가지가 있으며 각각의 값에 대한 설명은 다음과 같습니다.
정렬 속성값 |
설 명 |
top |
대상 객체를 위쪽 끝에 배치하기 |
bottom |
대상 객체를 아래쪽 끝에 배치하기하기 |
left |
대상 객체를 왼쪽 끝에 배치하기 |
right |
대상 객체를 오른쪽 끝에 배치하기 |
center_vertical |
대상 객체를 수직 방향의 중앙에 배치하기 |
center_horizontal |
대상 객체를 수평 방향의 중앙에 배치하기 |
fill_vertical |
대상 객체를 수직 방향으로 여유 공간만큼 확대하여 채우기 |
fill_horizontal |
대상 객체를 수평 방향으로 여유 공간만큼 확대하여 채우기 |
center |
대상 객체를 수직 방향과 수평 방향의 중앙아 배치하기 |
fill |
대상 객체를 수직 방향과 수평 방향으로 여유 공간만큼 확대하여 채우기 |
clip_vertical |
-대상 객체의 상하 길이가 여유 공간보다 클 경우에 남는 부분을 잘라내기 -top|clip_vertical 로 설정한 경우 아래쪽에 남는 부분 잘라내기 -bottom|clip_vertical 로 설정한 경우 위쪽에 남는 부분 잘라내기 -center_vertical|clip_vertical로 설정한 경우 위쪽과 아래쪽에 남는 부분 잘라내기 |
clip_horizontal |
-대상 객체의 좌우 길이가 여유 공간보다 클 경우에 남는 부분을 잘라내기 -right|clip_horizontal 로 설정한 경우 왼쪽에 남는 부분 잘라내기 -left|clip_horizontal 로 설정한 경우 오른쪽에 남는 부분 잘라내기 -center_horizontal|clip_horizontal로 설정한 경우 왼쪽과 오른쪽에 남는 부분 잘라내기 |
이것으로 gravity, layout_gravity 설명을 마치도록 하겠습니다.
도움이 되셨다면 손가락 한번 꾸~욱 눌러주시면 감사하겠습니다.^^
'IT 프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 뒤로가기 버튼 더블클릭해서 앱 종료하기 (0) | 2014.02.12 |
---|---|
안드로이드 ProgressBar 와 Thread (1) | 2014.02.12 |
안드로이드 리니어 레이아웃 자바코드로 화면 구성하기 (0) | 2014.02.12 |
안드로이드 리니어 레이아웃 xml 작성방법 및 속성 설명 (0) | 2014.02.12 |
안드로이드 레이아웃 종류 및 설명 (0) | 2014.02.11 |