Android Document  SDK old PDF 파일
안드로이드 UI 구현 - Common Layout Objects
작성자
작성일 2008-03-04 (화) 14:11
ㆍ추천: 0  ㆍ조회: 10615      
IP: 221.xxx.120
※ 아래의 글은 Android Wave와 카페통합을 통해 이곳으로 이동된 글임을 알려드립니다.
 
작성일시 : 2007.11.30 13:56
작성자 : 행복가득(siriusme)  
 
안드로이드 UI 구현 - Common Layout Objects

아래의 소개되는 것은 애플리케이션에서 사용하게될 공통 View Group들이다. 이 레이아웃을 조합하여 화면상에 View를 배치하고 보여줄 수 있다.
 
(1) FrameLayout
FrameLayout은 가장 간단한 레이아웃 객체다. 이것은 화면상에 예약된 빈 공간을 의미하며, 이곳에 사진을 하나 보여주는 것처럼 하나의 객체를 채워넣을 수 있다. 모든 자식 요소들은 화면 상단 왼쪽에 자리잡게 되며, FrameLayout에서는 자식 객체의 위치를 조정할 수 없다. 처음 자식 객체를 하나 그리고 다음 자식 객체가 그려질 때 다음 객체는 처음 객체를 덮어쓰면서 그려진다.
 
(2) LinearLayout
LinearLayout은 어떻게 정렬할 것인지 지정하느냐에 따라 수평 또는 수직으로 모든 자식 요소들을 한 방향으로 정렬한다. 모든 자식 객체는 순서대로 쌓이면서 그려진다. 만약 수평으로 정렬하여 객체를 배열할 경우 각 객체들은 일렬로 정렬되어 출력되며 세로로 가장 긴 객체를 기준으로 작은 객체들은 margin과 padding을 가지게 된다.  수직으로 정렬될 경우에는 객체가 얼마나 넓은지에 상관없이 한 행에 하나의 객체만 그려진다. LinearLayout은 자식 객체들간의 마진을 지정할 수 있고, 오른쪽/가운데/왼쪽 정렬을 지정할 수 있다.
LinearLayout은 각 자식객체들의 비중(weight)을 할당할 수 있다. 이 값은 자식들이 자식객체들이 화면상의 남은 공간에서 확장되어 그려질 수 있도록 한다. 자식 객체는 비중 값을 지정할 수 있고, 그 비중에 따라 남은 공간이 자식 객체에 할당 된다. 이 값의 기본값은 0이다. 가령 세개의 텍스트 박스가 있다고 할 때 두개의 비중이 1로 선언되면, 그 두개는 남은 공간에서 똑같이 확장될 것이고 남은 하나는 원래의 크기만을 유지하게 된다.
아래의 두개의 폼은 버튼과 레이블, 텍스트박스를 포함하는 LinearLayout을 보여주고 있다. padding을 적절하게 조정하기 위한 padding 값을 가지고 있다. 텍스트 박스의 가로 값은 FILL_PARENT이며, 나머지 객체들은 WRAP_CONTENT로 지정되어 있고 모두 좌측 정렬을 기본적으로 하고 있다. 왼쪽 레이아웃의 weight 값은 설정되어있지 않고(0이 기본값), 오른쪽 레이아웃의 Comments 텍스트 박스 weight는 1로 설정되어 있다. 만약에 Name 텍스트 박스가 마찬가지로 1로 설정되어 있다면 Name과 Comments 텍스트 박스는 같은 높이를 가지게 될 것이다.
Tip : 화면에 비례하는 사이즈의 레이아웃을 생성하려면 fill_parent 속성을 가진 container 객체를 생성하고, 자식 객체의 가로와 세로를 0으로 준 다음 상대적인(relative) 비중(weight) 값을 각 자식에게 할당하면 된다.
 
<그림1>
 
(3) TableLayout
TableLayout은 하위의 객체들을 행과 열을 이용하여 배치한다. TableLayout은 행를 정의하고 있는 TableRow 객체들로 구성되어 있다. TableLayout의 컨테이너들은 각 행과 열, 셀에 대해 테두리를 표시하지 않는다. 각 행은 0개 이상의 셀로 이루어져 있고 각 셀은 하나의 View 객체를 가질수 있다. 테이블은 모든 셀을 비워둘수 있으며 셀은 HTML에서처럼 두개를 이어붙일 수는 없다. 다음의 이미지는 TableLayout의 예이며, 아래의 예에서 도트 라인은 편의상 그려넣은 것으로 실제로는 보이지 않는다.

<그림2>
 
(4) AbsoluteLayout
AbsoluteLayout은 자식 객체들의 정확한 x/y 좌표를 지정해줄 수 있다. 0,0은 왼쪽 상단의 좌표이며 오른쪽이나 아래쪽으로 이동하려면 이 값을 증가시키면 된다. 마진은 지원되지 않고 각 객체가 겹치는 것은 허용하지만 추천하지는 않는다. 이것은 다양한 기기 화면에서 서로 다르게 동작될 수 있기 때문에 특별한 이유가 있는한 사용하지 않는 것을 권장한다.
 
(5) RelativeLayout
RelativeLayout은 자식 객체들이 ID로 명명된 다른 객체나 부모 객체에 대해 상대적인 위치를 지정할 수 있다. 두개의 객체를 오른쪽 테두리를 이용하여 정렬한다던가, 하나를 다른쪽의 아래에 위치시킨다던가, 또는 화면 정 가운데로 맞출 수 있다. 객체들은 주어진 순서에 의해서 그려지며 첫번째 객체는 화면 중앙에 위치하게 되고 다른 객체들은 가운데에 위치한 객체에 따라 상대적인 위치에 정렬이 된다. 만약에 XML을 이용하여 이 레이아웃을 만든다면, 객체를 참조하기 전에 반드시 이 XML 파일에 기술해야 한다.
다음은 RelativeLayout의 예제다. 아래의 그림에서 객체의 윤곽은 실제로는 보이지 않는 것이며 참고용으로 그렸다.

<그림3>
이 다이어그램은 화면 객체들의 클래스 이름과 특성을 보여주고 있다. 어떤 특성들은 객체에서 바로 제공되고 어떤 것들은 LayoutParams 멤버에 의해 제공된다. RelativeLayout 파라메터는 width, height, below, alignTop, toLeft, padding, marginLeft이다. 이 파라메터가 지원하는 값중의 일부는 다른 자식 객체들에 대해 상대적이다.
 
(6) 주요 View Group 요약
a. AbsoluteLayout : 자식 객체들이 부모 객체 내부에서의 상대적인 위치를 픽셀단위와 같이 정확하게 지정할 수 있다.
b. FrameLayout : 화면상에 하나의 객체를 보여주는 것과 같은 동작을 한다.
c. Gallery : bound list로부터 수평방향으로 스크롤되면서 이미지를 보여준다.
d. GridView : m개의 행과 n개의 열에 대해 스크롤되는 그리드를 보여준다.
e. LinearLayout : 자식 객체들을 하나의 수평 또는 수직 행으로 배치시킨다. 윈도우가 화면의 크기를 넘어가면 스크롤바를 생성한다.
f. ListView : 하나의 열로 구성된 리스트를 보여준다.
g. PopupList : freestanding popup 리스트를 테두리와 함께 보여준다.
h. RelativeLayout : 자식 객체들을 서로 상대적인 위치로 배치할 수 있다.
i. ScrollView : 수직으로 스크롤되는 객체들을 보여준다.
j. Spinner : 하나의 행으로 구성된 텍스트 박스의, bound list로부터 하나의 아이템만 보여준다.
k. SufaceView : Z축을 제공하여 레이어처럼 사용할 수 있는 View 객체.
l. TabHost : Tab을 제공.
m. TableLayout : 불규칙한 행과 열을 가진 표를 나타내는 레이아웃이다. 각 셀은 위젯을 가지고, 각 행들은 가장 큰 열의 크기로 리사이징 된다. 셀의 테두리는 보여지지 않는다.
n. ViewFlipper : 하나의 행으로 이루어진 텍스트 박스에서 하나의 아이템을 하나씩 보여준다. 슬라이드처럼 특정 시간 간격에 맞추어 아이템을 바꿀수 있다.
o. ViewSwitcher : ViewFlipper와 동일
이름아이콘 와이드오픈
2009-02-17 18:06
오..호..
라.. 그렇구나..
   
이름아이콘 tank
2009-07-28 11:46
Swing 의 JComponent 와 LayoutManager랑 비교하면서 생각하고 있는데... 아직 코딩을 안해봐서 그런지 감이 전혀 잡히질 않네요...ㅜㅜ
   
이름아이콘 음냐쿨쿨
2009-12-08 08:23
복잡하군요...
   
이름아이콘 Mr.KKang
2010-01-27 10:40
와우 좋은정보 감사합니다 ^_^
   
 
덧글 쓰기 0
3500
※ 회원등급 레벨 0 이상 읽기가 가능한 게시판입니다.