본문 바로가기

안드로이드

레이아웃

레이아웃

- 안드로이드는 다양한 화면 크기를 가지는 장치를 지원하기 때문에 절대적인 화면 위치를 사용하여 뷰를 배치하는 것보다, 상대적으로 뷰를 배치하는 것이 좋다.

- ViewGroup클래스로부터 상속을 받는다. 따라서 ViewGroup 클래스의 메소드와 필드들을 모두 사용할 수 있다.



 레이아웃 클래스

설명 

 LinearLayout

 자식들을 수직이나 수평으로 배치 

 TableLayout 

 자식들을 테이블 형태로 배치 

 GridLayout 

 자식들을 바둑판 모양으로 배치 

 RelativeLayout 

 자식들을 부모나 다른 자식에 상대적으로 배치 

 TabLayout 

 탭을 이용하여서 겹쳐진 자식 중에서 하나를 선택 

 AbsolutLayout 

 절대 위치로 배치 

 FrameLayout 

 모든 자식들을 좌측 상단에 겹치게 배치 





선형 레이아웃(linear layout)

자식뷰들을 수직이나 수평으로 배치 


속성 

관련 메소드 

설명 

 orientation

 setOrientation(int) 

 "horizontal"은 수평으로, "vertical"은 수직으로 배치한다. 

 gravity

 setGravity(int) 

 x축과 y축 상에 자식을 어떻게 배치할 것인지를 지정한다. 

 baselineAligned 

 setBaselineAligned(boolean) 

 false로 설정되면 자식뷰들의 기준선을 정렬하지 않는다.


Gravity 속성


 상수

값 

설명 

 top

0x30

 객체를 컨테이너의 상단에 배치, 크기를 변경하지 않음

 bottom

0x50

 객체를 컨테이너의 하단에 배치, 크기를 변경하지 않음

 left

0x03

 객체를 컨테이너의 좌측에 배치, 크기를 변경하지 않음 

 right 

0x05

 객체를 컨테이너의 우측에 배치, 크기를 변경하지 않음

 center_vertical 

0x10

 객체를 컨테이너의 수직의 중앙에 배치, 크기를 변경하지 않음 

 fill_vertical 

0x70

 객체를 컨테이너의 수직을 채우도록 배치

 center_horizontal 

 0x01 

 객체를 컨테이너의 수평을 중앙에 배치, 크기를 변경하지 않음 

 fill_horizontal

 0x07 

 객체를 컨테이너의 수평을 채우도록 배치

 center 

 0x11 

 객체를 컨테이너의 수평, 수직의 중앙에 배치

 fill 

 0x77 

 객체가 컨테이너를 가득 채우도록 배치


가중치(layout_weight)

- 선형 레이아웃의 자식 뷰에는 가중치를 부여할 수 있다.

* 화면의 크기에 비례하는 레이아웃을 생성하기 위해서는 컨테이너 객체의 layout_width와 layout_height 속성을 match_parent로 설정한다.

  그리고 자식 뷰들의 높이와 너비를 0으로 설정한다. 그런 후에 각 자식 뷰들의 가중치를 상대적으로 주면 화면의 크기에 비례하여 자식의 크기를 결정할   수 있다.




프레임 레이아웃(FrameLayout)

- 프레임 레이아웃 안에서 자식뷰들은 등장하는 순서대로 화면에 표시된다.

- 기준점은 좌측 상단에 된다.

- 만약 자식 뷰가 두개 이상이면 이전에 추가된 자식 위에 새로운 자식이 겹쳐져 그려진다.

- 주로 여러 자식 뷰들을 겹쳐서 배치한 후에 뷰의 가시성(visibility) 속성을 코드로 변경하여 어떤 순간에 하나의 뷰만을 표시하게 할 때 사용한다.

* 가시성(visibility) 속성


 속성

 XML

코드 

 visible

 android:visibility="visible"

 ImageView01.setVisibility(View.VISIBLE);

 invisible

 android:visibility="invisible" 

 ImageView01.setVisibility(View.INVISIBLE); 





테이블 레이아웃(TableLayout)

- 자식 뷰들을 테이블 형태로 배치한다.

- HTML에서 테이블을 표시하는 방법과 비슷하다.

- 하나의 테이블은 여러 개의 TableRow 객체로 이루어지고 하나의 TableRow 안에는 여러 개의 셀(cell)들이 들어간다.

- 만약 각행마다 길이가 다르다면 가장 긴 행의 길이가 테이블의 폭이 된다.

- 테이블 레이아웃에서는 모든 셀들의 너비가 자동으로 결정된다.

- ex) 셀들의 너비를 layout_width로 wrap_content로 설정 하더라도 강제적으로 match_parent로 설정된다.

- 하지만 각 셀들의 높이는 layout_height로 지정할 수 있다.

 

 속성

설명 

 stretchColumns

 열 늘림 (속성에 "1"을 넣으면 1번째 열은 내용물에 따라서 늘어남)

 shrinkColumns

 열 축소 

 collapseColumns

 열 감춤 




상대적 레이아웃(RelativeLayout)

- 자식 부의 위치를 부모 뷰나 다른 자식 뷰들에 상대적으로 지정하는 방법이다.

- 뷰들은 기본적으로 주어진 순서대로 그려지는데 만약 첫 번째 뷰가 화면의 중앙에 위치하고 있다면 그 뷰에 정렬시킨 다른 뷰들은 화면의 중앙에 배치     될 것이다.

- 이러한 순서 때문에 XML을 이용해 레이아웃을 지정한다면 기준이 되는 뷰는 XML 파일에서 먼저 등장하여야 한다.


 속성

설명 

 layout_above

 만약 true이면 현재 뷰의 하단을 기준 뷰의 위에 일치시킨다. 

 layout_below

 현재 뷰의 상단을 기준 뷰의 하단에 위치시킨다. 

 layout_centerHorizontal

 수평으로 현재 뷰의 중심을 부모와 일치시킨다. 

 layout_centerInParent

 부모의 중심점에 현재 뷰를 위치시킨다. 

 layout_centerVertical

 수직으로 현재 뷰의 중심을 부모와 일치시킨다. 

 layout_toLeftOf

 현재 뷰의 우측단을 기준 뷰의 좌측단에 위치시킨다. 

 layout_toRightOf

 현재 뷰의 좌측단을 기준 뷰의 우측단에 위치시킨다. 




절대적 레이아웃(AbsoluteLayout)

- 절대적인 좌표값을 주어서 뷰들을 배치하는 방법이다.

- 뷰의 속성 layout_x. layout_y에 원하는 좌표값을 지정하면된다.

- 안드로이드 화면 크기가 제각각이기 때문에 많이 사용되지는 않는다.

- 안드로이드에서도 절대적 레이아웃은 권장하지 않는다.













'안드로이드' 카테고리의 다른 글

이벤트 처리2  (0) 2016.03.31
이벤트 처리  (0) 2016.03.31
사용자 인터페이스 (UI) 기초  (0) 2016.03.31
Error:Execution failed for task ':app:mergeDebugResources'  (0) 2016.03.29
Google Maps Android API v2 예제[펌]  (0) 2016.02.03