안드로이드(Android) 에서 layout_gravity gravity 속성차이 알아보기

 

개발환경 : window 7 64bit, Eclipse Kepler, Android 4.2.2

 

안드로이드에서 화면에 컨트롤을 배치할 때 쓰이는 배치(gravity) 에 대해

알아보고 그 차이점을 샘플화면으로 구현해 볼려고 한다.

 

Layout_gravity : 부모 컨테이너의 여유공간을 활용하여 뷰를 배치한다.

Gravity : 뷰내에 여유공간을 활용하여 글자나 이미지등을 배치한다.

 

설명에서 두 속성의 차이점은 layout 의 정렬 속성이냐 뷰에서의 정렬

속성이냐 이다. Layout 에 포함되어있는 layout 이나 뷰등의 컨트롤을

정리할 때 쓰고 그런 컨트롤중 뷰를 상속받아 만든 것들의 정렬은

Gravity 속성을 쓰는 것이다.

 

Gravity 속성을 사용하기 위해서는 컨테이너와 컨트롤들의 layout_height

Layout_width 속성이 wrap_content 가 되야 한다. 그래야 여유 공간이 생기기

때문이다. 가로로 정렬하고 싶다면 layout_width = 'wrap_content' 가 되어

있어야 하고 세로로 정렬하고 싶다면 layout_height = 'wrap_content' 로 셋팅

되어야 한다. match_parent 는 여유공간없이 꽉 채우기 때문에 정렬을

할수 없는 것이다.

 

(1) layout_gravity 표현

 

샘플프로젝트를 생성하고 간단하게 LinearLayout vertical 속성으로

하나 만들고 그 안에 TextView 3개를 넣는다.

 

 

참고로 xml 디자인 뷰에서 Layout 종류를 바꾸고 싶을 때 Outline 창에서

하면 된다. Outline 창에 있는 레이아웃을 선택하고 오른마우스를 누르면

Change Layout 가 나온다.

 

다음은 레이아웃에 포함된 3개의 TextView gravity 속성을 각각 다르게

설정해 보자. 컨트롤을 하나씩 선택하고 Properties 창에서

Layout Parameter > Gravity 속성값을 변경한다. 속성값에 보면 값이

다양하게 있음을 알수 있다. 다중선택도 가능한데 left|bottom

형태로 표현이 된다.

 

TextView left, center, right 로 표현한 그림이다.

그리고 위에서 gravity 를 표현하기 위해서 layout_width,height 값을 wrap_content

해야 된다고 했는데 컨트롤을 감싸고 있는 컨테이너의 layout_width,height

match_parent 가 되야하고 정렬을 할 컨트롤의 속성이 wrap_content 가 되야

한다는 것이다. 헷갈리지 말자.

  

(2) gravity 표현

 

이제 뷰 내부에 text 나 이미지의 정렬을 위해 사용하는 gravity 속성을

알아보자. 위에서 첨가한 3개의 TextView 2개는 지우고 하나의

TextView 속성을 부모 컨테이너의 크기에 맞게 match_parent 로 설정한다.

 

이것은 TextView 내부에 있는 Hello world 글자를 정렬하기 위해서 이다.

글자가 돌아다닐려면 여유공간이 필요하기 때문이다.

Gravity 속성을 설정하기 위해 properties 창으로 가보자. TextView > Gravity 에서

설정하면 되는데 클릭해보면 layout_gravity 설정할때처럼 다양한 값들이

있음을 볼수 있다. 아래 그림은 멀티선택을 한 모습인데 오른쪽 하단으로

Text 를 정렬하라는 설정이다.

 

Xml 은 다음과 같이 설정되어있다.

 

 

 

 

 

 

Posted by 녹두장군