[안드로이드] 안드로이드 레이아웃
- 프로그래밍 정보
- 2010. 9. 30.
반응형
이어지는 글
안드로이드 레이아웃 ◀ 현재 위치
뷰가 그려지는 과정
2010/09/30 - [프로그래밍/안드로이드] - [안드로이드] 안드로이드 레이아웃
2010/10/04 - [프로그래밍/안드로이드] - [안드로이드] 뷰가 그려지는 과정
안드로이드 레이아웃 ◀ 현재 위치
뷰가 그려지는 과정
2010/09/30 - [프로그래밍/안드로이드] - [안드로이드] 안드로이드 레이아웃
2010/10/04 - [프로그래밍/안드로이드] - [안드로이드] 뷰가 그려지는 과정
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
안드로이드의 레이아웃에 관한 글입니다.
안드로이드 레이아웃
우선 안드로이드에서 레이아웃은 모두 뷰그룹(ViewGroup) 클래스의 서브클래스 입니다.
FrameLayout
가장 간단한 레이아웃 입니다. 기본적으로 스크린 상의 빈 공간을 나타냅니다. 이곳에는 하나의 객체를 넣을 수 있습니다 ( 이미지 같은 )
이 레이아웃의 모든 자식 엘리먼트는 왼쪽 상단에 위치하여 배치되는데, 이 위치를 바꿀수가 없습니다.
그 다음의 자식뷰가 있다면 그것은 이전것을 가리는 형태로 표시됩니다.
이 레이아웃의 모든 자식 엘리먼트는 왼쪽 상단에 위치하여 배치되는데, 이 위치를 바꿀수가 없습니다.
그 다음의 자식뷰가 있다면 그것은 이전것을 가리는 형태로 표시됩니다.
LinearLayout
아마도 가장 많이 쓰이는 레이아웃이 아닐까 합니다. 저같은 경우 대부분 이 리니어레이아웃을 여러개 조합하여 사용합니다. 딱히 다른 레이아웃을 쓰기가 번거롭기도 하더군요;;;
리니어 레이아웃은 모든 자식들을 방향에 따라 배치하는 레이아웃 입니다. 방향은 수직 또는 수평 중 하나를 가지며 , orientation 속성에서 지정합니다. 모든 자식들은 순서대로 배치됩니다.
따라서 수직 방향이라면 넓이에 관계없이 각 행은 하나의 자식만 가질것이고, 수평방향이라면 하나의 행 높이만 가지겠지요. ( 여기에서 높이는 가장 큰 자식의 높이 + 패딩값 으로 설정됩니다. )
이 레이아웃은 자식들간의 마진과 정렬(Gravity) 를 제어합니다. 또한 자식들에게 개별적으로 가중치(weight) 를 지정할 수도 있습니다. 여기에서 가중치란 '중요성' 을 지정하는 것으로서, 부모 뷰의 남은 공간을 채울 수 있도록 자식뷰를 확대하는 기능을 합니다.
자식뷰는 정수형 가중치 값을 지정할 수 있고, 이렇게 되면 뷰 그룹의 잔여공간은 가중치의 비율 순서대로 자식들에게 할당됩니다.
가중치의 디폴트 값은 0 입니다.
뷰 그룹의 layout_width 와 layout_height 속성을 fill_parent(꽉 채우기) 로 설정하고, 자식들의 높이와 너비를 0으로, 그리고 스크린 상의 비율에 따라 상대적인 weight 값을 자식뷰들에게 지정하면 스크린에 잘 맞는 크기의 레이아웃을 만들 수 있을 것입니다.
위 그림에서 왼쪽은 Comments 텍스트 박스가 가중치가 0 인 상태입니다. (디폴트)
오른쪽은 가중치가 1인 상태입니다. Name 박스도 가중치가 1이라면 Name 과 Comments 는 동일한 높이를 가지겠네요.
수평 방향의 리니어 레이아웃에서 아이템들은 그것들의 텍스트 베이스라인(base-line) 위치에 의해 정렬되어 집니다. 즉, 최상위 또는 가장 왼쪽 기준으로 첫번째 엘리먼트의 첫번째 라인에 정렬됩니다.
이것은 화면을 보고있는 사용자가 여러개의 엘리먼트의 텍스트를 읽기위해 위아래로 움직이는 것을 막아주는 역할을 합니다.
XML 에서 android:baselineAligned="false" 에 의해 해제할 수 있습니다.
리니어 레이아웃은 모든 자식들을 방향에 따라 배치하는 레이아웃 입니다. 방향은 수직 또는 수평 중 하나를 가지며 , orientation 속성에서 지정합니다. 모든 자식들은 순서대로 배치됩니다.
따라서 수직 방향이라면 넓이에 관계없이 각 행은 하나의 자식만 가질것이고, 수평방향이라면 하나의 행 높이만 가지겠지요. ( 여기에서 높이는 가장 큰 자식의 높이 + 패딩값 으로 설정됩니다. )
이 레이아웃은 자식들간의 마진과 정렬(Gravity) 를 제어합니다. 또한 자식들에게 개별적으로 가중치(weight) 를 지정할 수도 있습니다. 여기에서 가중치란 '중요성' 을 지정하는 것으로서, 부모 뷰의 남은 공간을 채울 수 있도록 자식뷰를 확대하는 기능을 합니다.
자식뷰는 정수형 가중치 값을 지정할 수 있고, 이렇게 되면 뷰 그룹의 잔여공간은 가중치의 비율 순서대로 자식들에게 할당됩니다.
가중치의 디폴트 값은 0 입니다.
뷰 그룹의 layout_width 와 layout_height 속성을 fill_parent(꽉 채우기) 로 설정하고, 자식들의 높이와 너비를 0으로, 그리고 스크린 상의 비율에 따라 상대적인 weight 값을 자식뷰들에게 지정하면 스크린에 잘 맞는 크기의 레이아웃을 만들 수 있을 것입니다.
위 그림에서 왼쪽은 Comments 텍스트 박스가 가중치가 0 인 상태입니다. (디폴트)
오른쪽은 가중치가 1인 상태입니다. Name 박스도 가중치가 1이라면 Name 과 Comments 는 동일한 높이를 가지겠네요.
수평 방향의 리니어 레이아웃에서 아이템들은 그것들의 텍스트 베이스라인(base-line) 위치에 의해 정렬되어 집니다. 즉, 최상위 또는 가장 왼쪽 기준으로 첫번째 엘리먼트의 첫번째 라인에 정렬됩니다.
이것은 화면을 보고있는 사용자가 여러개의 엘리먼트의 텍스트를 읽기위해 위아래로 움직이는 것을 막아주는 역할을 합니다.
XML 에서 android:baselineAligned="false" 에 의해 해제할 수 있습니다.
TableLayout
테이블처럼 행과 열 안에 자식들을 배치하는 레이아웃입니다.
기본적으로 행, 열, 셀에 대한 경계선을 표시하지 않습니다.
테이블은 가장 많은 셀을 가진 행 만큼의 열을 가지며, 셀을 빈 공간으로 남겨둘 수도 있습니다.
layout_span 속성으로 열을 합칠수도 있으며, 행은 합칠 수 없습니다.
TableRow 객체는 테이블 레이아웃의 자식 뷰이며, 각각의 TableRow 는 하나의 행을 정의합니다.
또한 각 행은 0 또는 하나 이상의 셀을 가질 수 있고, 하나의 셀은 다양한 뷰 객체로 구성될 수도 있습니다. 그리고 셀 안에 또다른 테이블 레이아웃을 포함할 수도 있으므로 셀이 뷰 그룹이 될 수도 있습니다.
2개의 행과 2개의 셀, 그리고 직접 추가한 점선으로 경계선을 표시한 그림 입니다.
열은 숨기기 기능이나, 확대 기능을 사용할 수도 있고, 테이블 자체가 스크린에 맞추어 축소될 수도 있습니다.
기본적으로 행, 열, 셀에 대한 경계선을 표시하지 않습니다.
테이블은 가장 많은 셀을 가진 행 만큼의 열을 가지며, 셀을 빈 공간으로 남겨둘 수도 있습니다.
layout_span 속성으로 열을 합칠수도 있으며, 행은 합칠 수 없습니다.
TableRow 객체는 테이블 레이아웃의 자식 뷰이며, 각각의 TableRow 는 하나의 행을 정의합니다.
또한 각 행은 0 또는 하나 이상의 셀을 가질 수 있고, 하나의 셀은 다양한 뷰 객체로 구성될 수도 있습니다. 그리고 셀 안에 또다른 테이블 레이아웃을 포함할 수도 있으므로 셀이 뷰 그룹이 될 수도 있습니다.
2개의 행과 2개의 셀, 그리고 직접 추가한 점선으로 경계선을 표시한 그림 입니다.
열은 숨기기 기능이나, 확대 기능을 사용할 수도 있고, 테이블 자체가 스크린에 맞추어 축소될 수도 있습니다.
RelativeLayout
렐러티브 레이아웃은 자식뷰들의 위치를 부모 뷰 또는 상호간 상대적으로 배치하는 레이아웃 입니다. 엘리먼트는 주어진 순서대로 적용이 되는데요,
만약 첫번째 엘리먼트가 스크린 가운데에 있고, 다른 엘리먼트들은 가운데에부터 상대적으로 정렬될 것입니다. 이러한 순서 때문에 XML 레이아웃을 사용하면서, 다른 뷰들을 배치하기 위해 참조할 엘리먼트는 참조하기전에 선언이 되어 있어야 합니다.
소스도 한번 보시지요.
관련 엘리먼트를 가르키는 속성은 ID 참조구문( @id/id ) 를 사용합니다.
예를들어 텍스트 뷰에 속성을 toLeft="@id/button" 으로 지정하려면 'button' 은 미리 선언되어 있어야 하며 'button' 이라는 ID 를 가진 뷰의 왼쪽에 텍스트뷰가 배치됩니다.
만약 첫번째 엘리먼트가 스크린 가운데에 있고, 다른 엘리먼트들은 가운데에부터 상대적으로 정렬될 것입니다. 이러한 순서 때문에 XML 레이아웃을 사용하면서, 다른 뷰들을 배치하기 위해 참조할 엘리먼트는 참조하기전에 선언이 되어 있어야 합니다.
소스도 한번 보시지요.
관련 엘리먼트를 가르키는 속성은 ID 참조구문( @id/id ) 를 사용합니다.
예를들어 텍스트 뷰에 속성을 toLeft="@id/button" 으로 지정하려면 'button' 은 미리 선언되어 있어야 하며 'button' 이라는 ID 를 가진 뷰의 왼쪽에 텍스트뷰가 배치됩니다.
FrameLayout |
단 하나의 오브젝트를 표시하기 위한 뷰 프레임으로서 역할을 하는 레이아웃 |
Gallery |
하나로 묶여진 리스트에서, 이미지들의 수평적 스크롤링을 표시한다. |
GridView |
m 열과 n 행의 스크롤링 그리드(grid)를 표시한다. |
LinearLayout |
하나의 수평적 또는 수직적 행에 그것의 자식들(children)을 배치하는 레이아웃. 윈도우의 길이가 화면의 길이를 초과한다면 그것은 스크롤 바를 생성한다. |
ListView |
하나의 열로된 스크롤링 리스트를 표시한다. |
RelativeLayout |
여러분이 자식(child) 오브젝트의 위치를 서로간(자식(child) A는 자식(child) B의 왼쪽)에 또는 부모(parent)에 상대적(부모(parent)의 최상단에 정렬)으로 지정하는 것을 가능하게 한다. |
ScrollView |
엘리먼트의 열을 수직적으로 스크롤링 한다. |
Spinner |
한 줄짜리 텍스트 박스 내에, 하나로 묶여진 리스트에서 한번에 하나의 아이템을 보여준다. 수평 또는 수직으로 스크롤 할 수 있는 한 줄짜리 리스트 박스와 다소 비슷하다. |
SurfaceView |
그리기 전용 공간에 직접적인 접근을 제공한다. 그것은 서피스(surface) 위에 중층적인(layered) 자식(child) 뷰들을 보유할 수 있다. 그러나 그것은 위젯을 사용하는 것보다는 픽셀을 그릴 필요가 있는 애플리케이션을 위해 의도한 것이다. |
TabHost |
클릭을 모니터하는 탭 선택 리스트를 제공하며, 탭을 클릭할 때마다 애플리케이션이 스크린을 변경하는 것을 가능하게 한다. |
TableLayout |
임의의 개수의 행과 열을 가진 표 형식의 레이아웃, 각각의 셀은 여러분이 선택한 위젯을 보유한다. 행의 크기는 가장 큰 열에 맞게 재구성된다. 셀 경계선은 보이지 않는다. |
ViewFlipper |
한 줄짜리 텍스트박스에서 한번에 한 개의 아이템을 보여주는 리스트. 그것은 슬라이드 쇼처럼 시간 간격으로 아이템을 교체하도록 설정될 수 있다. |
ViewSwitcher |
ViewFlipper와 같다. |
일반적인 안드로이드의 레이아웃에 관한 글 이었습니다.
내용은 별로 없는것 같은데 길이가 길어져 버렸네요 -ㅁ-;
다음 글은 이러한 레이아웃이 안드로이드에서 어떻게 그려지는지, 그려지는 과정을 포스팅 할까 합니다.
관련글
[안드로이드] 스타일과 테마 적용하기
[안드로이드] 레이아웃 선언하기
[안드로이드] 레이아웃 리소스 ID 선언
[안드로이드] 레이아웃 뷰의 위치
[안드로이드] UI 레이아웃과 위젯
[안드로이드] 레이아웃 선언하기
[안드로이드] 레이아웃 리소스 ID 선언
[안드로이드] 레이아웃 뷰의 위치
[안드로이드] UI 레이아웃과 위젯
반응형