Programming Language/Android Programming

레이아웃

D4tai1 2018. 9. 14.

1. 레이아웃

- ViewGroup 클래스로부터 상속받으며 내부에 무엇을 담는 용도로 사용된다.

- LinearLayout이 주로 쓰이지만 LinearLayout으로 커버가 불가능한 것은 다른 레이아울을 사용하여야 한다.

 

1) 레이아웃의 종류

 [1] LinearLayout = 위젯을 위에서 아래 또는 왼쪽에서 오른쪽으로 차례로 배치한다.

 [2] RelativeLayout = 위젯이 속한 레이아웃의 상하좌우의 위치를 지정하여 배치한다.

  - 즉, 상대방을 보고 결정한다.

 [3] TableLayout = 위젯을 행렬의 형태로 배치한다.

 [4] GridLayout = TableLayout과 비슷하지만 영역 내에서 다양하게 배치할 때 효율적이다.

 [5] FrameLayout = 위젯을 겹쳐서 배치한다.

  - 즉, 위젯 위에 위젯을 포개는 방식이다.

 

2) 레이아웃의 속성

 [1] orientation = 레이아웃 내에서 배치할 위젯의 방향(가로, 세로)을 결정한다.

  - Horizontal : 가로로 배치

  - Vertical : 세로로 배치

 [2] gravity = 레이아웃 내에서 배치할 위젯의 정렬 방향(위, 아래, 좌, 우, 중앙)을 결정한다.

 [3] layout_gravity = 레이아웃 밖에서 자신(위젯)을 어디에 배치할지 결정한다.

 [4] padding = 레이아웃 내 배치할 위젯의 여백을 결정한다.

 [5] layout_weight = 레이아웃이 전체화면에서 차지하는 비율을 설정한다.

 

2. LinearLayout

1) 사용방법

 [1] 기본형태

 

 - 위 그림이 기본 텍스트모드 시 보여지는 코드이다.

 

 [2] gravity속성

 

 - 위 그림은 6번라인에 그래비티 속성을 추가하여 오른쪽과 아래쪽 정렬을 하는 코드이다.

 

 

 - 정렬했음에도 불구하고 우측정렬은 되지만 아래쪽으로 정렬되지는 않는다.

 - 현재 선택된 3개버튼의 layout_weight의 속성은 1이다. (1:1:1 비율로 사용하겠다는 말이다.)

 

 - 정렬이 되지 않는 이유는 버튼이 아닌 LinearLayout의 layout_height속성이 wrap_content로 전체가 선택되지 않았다.

 - 그래서 파란라인 선택된 영역 중에서 가장 아래이기 때문에 겉으로보면 아래정렬이 되지 않은 것처럼 보인다.

 

- 위 그림과 같이 layout_height의 속성을 부모의 전체영역인 match_parent로 변경해준다.

 

 [3] gravity와 layout_gravity 차이

- 위 그림은 첫 번째 버튼의 gravity속성을 right로 선택한 화면이다.

- 버튼 내의 글자가 오른쪽으로 이동한 것을 볼 수 있다.

 

- 위 그림은 첫 번째 버튼의 layout_gravity속성을 right로 선택한 화면이다.

- 버튼 위젯의 위치가 레이아웃에서 오른쪽에 위치한 것을 볼 수 있다.

 

- 첫 번째 버튼의 layout_gravity속성은 right로 지정했다.

- 두 번째 버튼의 layout_gravity속성은 center_horizontal로 지정했다.

- 세 번째 버튼의 layout_gravity속성은 left로 지정했다.

 

- 첫 번째 버튼은 gravity속성에 top과 right를 지정했고, layout_gravity속성은 center_horizontal을 지정했다.

- 두 번째 버튼은 gravity속성에 center와 left를 지정했고, layout_gravity속성은 left를 지정했다.

- 세 번째 버튼은 gravity속성에 bottom과 right를 지정했고, layout_gravity속성은 right를 지정했다.

 

2) 시연

[1] 먼저 레이아웃 하나를 만들고 그 안에 3개의 레이아웃을 추가한다.

[2] 추가한 3개의 레이아웃 내에 각각 2개의 버튼위젯을 만든다.

[3] 3개의 레이아웃 중 첫 번째, 세 번째 레이아웃은 orientation속성을 vertical로 설정한다.

[4] 3개의 레이아웃 중 두 번째, orientation속성을 horizontal로 설정한다.

[5] 3개의 레이아웃 전체를 선택하여 layout_weight속성을 1로 부여하여 레이아웃 별 화면비율을 1:1:1로 맞춘다.

[6] 가장 바깥쪽의 레이아웃의 layout_height속성을 match_parent로 설정한다.

 

[7] 3개의 레이아웃 전체를 선택하여 gravity속성을 center로 설정한다.

 

[8] 가장 바깥쪽의 레이아웃의 layout_width속성을 100dp로 설정한다.

[9] 가장 바깥쪽의 레이아웃의 layout_gravity속성을 center로 설정한다.

 

3) 시연

[1] 큰 테두리의 레이아웃 두 개는 layout_height속성은 0dp, layout_weight속성은 1로 설정한다.

[2] 이렇게 설정하는 이유는 길이가 아닌 비율로 맞추기 위해서이다.

 

[3] 빨간색 레이아웃에 포함된 두 개는 layout_width속성은 0dp, layout_weight속성은 1로 설정한다.

 

[4] 노란색 레이아웃, 검정색 레이아웃은 layout_height속성을 0dp, layout_weight속성은 1로 설정한다.

 

3. RelativeLayout

1) 기본형태

 

2) 배치방법

 - 한 가지 속성이 아닌 두 가지 속성(가로, 세로)이 있어야 한다.

 - 단 center속성을 주려면 한 가지 속성만 있어도 가능하다.

 - 위 그림에 맞게 속성을 부여하면 그에 맞는 배치를 할 수 있다.

 

 

 

4. 기타 레이아웃

- 위 형태에 맞춰서 기준 위젯을 중심으로 배치를 할 수 있다.

 

- 위 그림은 기준 위젯을 중심으로 나머지 버튼을 배치한 모습이다.

 

- 위 그림은 하나만 기준으로 삼으면 안되기 때문에 2개의 기준을 두고 배치한 모습이다.

 

5. TableLayout

1) 속성

 - layout_column = 현재 위젯을 지정한 열에 맞춰서 표시한다.

 - layout_span = 가로의 길이를 늘린다.

 

 [1] layout_span속성을 2로 주면 위젯 2개만큼의 크기로 확장한다.

 

 

 [2] layout_column속성을 1로 주면 2번째 위젯의 위치부터 시작한다.

 

 

 [3] stretchColumns속성을 *로 주면 비율에 맞춰서 크기만큼 채워준다.

 [4] 가로는 layout_width속성을 0으로 잡고 비율(layout_weight=1)을 1로 주면 비율에 따라 크기가 맞춰진다.

 [5] 세로는 layout_height속성을 0으로 잡고 비율(layout_weight=1)을 1로 주면 비율에 따라 크기가 맞춰진다.

'Programming Language > Android Programming' 카테고리의 다른 글

메뉴버튼  (0) 2018.10.09
계산기, 예약  (0) 2018.09.18
체크박스, 스위치, 토글, 라디오  (0) 2018.09.04
계산기  (0) 2018.09.03
프로그램 설치 및 기본 사용법  (0) 2018.08.28

댓글