본문 바로가기

Android/Layout

[Android Layout] 1. 레이아웃들의 속성 - 레이아웃을 컨트롤하기


레이아웃중에 기본은 LinearLayout 입니다.
사실 왠만한 UI는 LinearLayout과 다른 위젯들을 함께 쓴다면 충분히 만들어 낼 수 있습니다.

이 LinearLayout을 컨트롤 하려면, 속성을 알아야합니다.
여러가지 속성들이 있지만, 내가 원하는데로 LinearLayout을 컨트롤하는데 중요한 속성들만을 논해보도록 하겠습니다.


 1. 레이아웃의 크기

레이아웃이 화면에서 얼마만큼의 크기를 차지하게 할것인가를 정할 수 있습니다.
가로크기와 세로크기에 대해서 숫자, 비율, 레이아웃이 가지는 자식들의 크기값으로 지정할 수 있습니다.


   부모크기만큼  가질 데이터 크기만큼  pixel 또는 dp(dip)
 android:layout_width  fill_parent  wrap_content  480px 또는 320dp
 android:layout_height  fill_parent  wrap_content  800px 또는 533dp

android:layout_width 속성 - 이 속성은 레이아웃의 가로크기를 나타냅니다.
android:layout_height 속성 - 이 속성은 레이아웃의 세로크기를 나타냅니다.

부모크기만큼(부모의 전체크기중에서, 내가 지금 작성한 레이아웃보다 먼저 작성된 레이아웃을 제외하고 남은 크기)
현재 안드로이드 SDK 버전이 올라가면서 SDK 2.2부터는 match_parent 라는 값이 나오고 있습니다.
이 값은 기존의 fill_parent와 같은 값이지만, 아직은 모든 디바이스가 2.2 이상의 SDK를 사용하지 않으니, 이 값은 사용하지 않습니다. 기존 처럼 부모크기처럼 지정할때에는 fill_parent라고 설정해줍니다.

가지게 될 데이터 크기만큼
내가 작성하려는 레이아웃이 가지게될 자식 레이아웃들의 크기가 얼마나 커질지 알 수 없는 상황일때 사용합니다. 또는, 텍스트 뷰, 이미지 뷰의 경우에는 입력받게될 텍스트, 입력될 이미지의 크기에 따라 레이아웃의 크기를 변경할때 사용합니다.

pixel 또는 dp(dip)로 직접지정
직접 숫자를 지정해서 레이아웃을 작성할수도 있습니다. 하지만 이방법은 반은 추천하고 반은 추천하지 않습니다.
dp의 경우에는 잘만사용한다면 왠만한 경우에 대해서도 같은 UI를 제공할 수 있는 방법이기 때문에 추천되는 경우이지만,
pixel의 경우에는 상당히 비추천하는 방법입니다.(관련글 링크 : [Android] 디자이너와의 협업을 위한 몇가지 팁)
관련글 링크를 읽어보시면 아시겠지만, dp를 사용하는 방법은 많은 Resource를 제공해 줄 수 없는 상황에서 상당히 현명하고 유리한 선택이 될 수 있습니다. 모든 리소스를 제공할 수 있다면 모든 디바이스에 같은 UI를 보여줄 수 있겠지만 이는 사실상 힘든일이기 때문입니다.(대체리소스 제공하기 관련글 : [Android] Providing Resource)

스크린사이즈와 덴시티 관련 표
 
 






 2. gravity와 layout_gravity (중력)

사실 저도 처음에 이 두녀석때문에 애를 많이 먹었습니다.
어떤 경우엔 속성이 먹히고, 어떤 경우엔 속성이 먹히지 않는 경우가 있고 하더군요.
결론부터 말씀드리자면, 이 두녀석들을 모두 사용합니다. 때에 따라서 두녀석이 모두 필요한 경우가 있으니까요.

우선 gravity라는 단어가 모두 들어가는 두 속성이기 때문에 중력작용을 하는것인가 보다 라고 알 수 있습니다.
이제 이 속성에 들어가는 값에 따라서 레이아웃들은 그 위치로 중력을 받게 됩니다. 우리가 땅(아래)쪽으로 중력을 받는것처럼 말이죠.


android:gravity 속성 (내 안의 중력)
- 이 속성은 현재 작성하고 있는 레이아웃의 자식 레이아웃들이 중력을 어디로 가질지 정해줍니다.

android:layout_gravitiy 속성 (나의 중력)
- 이 속성은 현재 작성하고 있는 레이아웃의 중력을 어디로 가질지 정해줍니다.



부모레이아웃에서 gravity 속성에 있는 값은 자식레이아웃에서 layout_gravity에 있는 값과 같은 결과를 낼 수 있습니다.
그럼에도 두 속성을 모두 쓰려는 이유는 자식 레이아웃들이 일괄적으로 중력을 가져야 하는 경우에는 부모레이아웃에서 설정한 gravity 속성만으로 해결할 수 있지만, 자식 레이아웃들이 각각 다른 중력을 가져야 할 경우엔, 자식 레이아웃들에서 left, right 등을 설정해 주어야 하기 때문입니다.



어쨋든, 이 속성들에 들어갈 수 있는 값들을 알아보도록 하겠습니다.

총 7가지의 값들이 있고 그 값들은 아래와 같습니다.

android:gravity & android:layout_gravity 에 설정할 수 있는 값들
왼쪽으로 중력주기(left), 
오른쪽으로 중력주기(right), 
위로 중력주기(top), 
아래로 중력주기(bottom), 
수직 가운데로 중력주기(center_vertical), 
수평 가운데로 중력주기(center_horizontal)
정가운데로 중력주기(center)

또한 이 7가지의 값들은 논리적으로 만족하는 경우에는 복수의 값을 지정할 수 있습니다.
(예를들면 왼쪽으로 중력을 주면서, 수직 가운데로 중력을 준다거나, 수평가운데로 중력을 주면서 아래로 중력을 준다거나 하는 경우, 오른쪽으로 중력을 주면서 동시에 아래로 중력을 주는 경우등.)

아래는 여러가지 경우에 대해
gravity (부모에서 자식에세 gravity 속성을 지정하는 경우)와 
layout_gravity (자기 자신의 gravity 속성을 지정하는 경우)에 대해 그림으로 표현한 것입니다.






 3. orientation (방향)

LinearLayout에서 orientation 속성은 매우 중요합니다.
이 속성을 통해 기본적으로 자식(child) 뷰 들을 어떻게 배치할지 결정할 수 있습니다.

속성 값에는 두가지가 있습니다.

horizontal : 자식 뷰(위젯)들을 가로(수평)으로 배치하겠다.
vertical : 자식 뷰(위젯)들을 세로(수직)으로 배치하겠다.

방대한 내용이 아니기 때문에 짧게 썼지만, 굉장히 중요합니다.

LinearLayout은 orientation을 설정하지 않더라도 
기본적으로 horizontal 의 속성값을 default로 가지고 있습니다.





 4. layout_weight (가중치)

layout_weight 에 대해서는 아래의 포스트를 참고합니다.




 5. background (배경/이미지)

뒷 배경이미지를 사용할 경우 이 속성을 통해 설정할 수 있습니다.

간단하게 android:background 라는 속성만으로 여러가지 것들을 설정 할 수 있습니다.

색 설정 : android:background="#FFFFFF" :  흰색 코드를 통해 배경색을 흰색으로 설정

배경 이미지 설정 : android:background="@drawable/이미지파일이름" :
res/drawable에 가지고 있는 이미지 리소스를 통해 배경 설정

클릭(제스쳐)까지 고려한 배경 이미지 설정 :


'Android > Layout' 카테고리의 다른 글

[Android Layout] 0. 레이아웃이란?  (0) 2011.02.25
[Android] Layout XML - 안드로이드 레이아웃 마스터  (2) 2011.02.24
XML 레이아웃  (0) 2010.09.08