리니어 레이아웃
레이아웃이란?
뷰그룹 중에서 자주 사용하는 뷰의 배치 방식을 정의한것.
레이아웃의 대표적인 속성
속성 | 설명 |
채우기 : fill model | 여유공간에 어떻게 채울것인지 설정 |
방향 : orientation | 뷰를 추가할 방향을 설정 |
정렬방향 : gravity | 뷰의 정렬 방향을 설정 |
여유공간 : padding | 뷰의 여유 공간을 설정 |
공간가중치 : weight | 뷰가 차지하는 공간의 가중치 값을 설정 |
안드로이드에서 제공하는 대표적인 레이아웃의 종류
레이아웃 이름 | 설명 |
제약 레이아웃 (ConstraintLayout) |
제약조건(Constraint) 기반 모델 제약 조건을 사용해 화면을 구성, 안드로이드 스튜디오의 디폴트 레이아웃 |
리니어 레이아웃 (LinearLayout) |
박스(Box) 모델 사격형의 영역을 각각의 뷰마다 지정하여 할당 한 쪽 방향으로 차례대로 뷰를 추가하여 화면 구성 |
상대 레이아웃 (RelativeLayout) |
규칙(Rule) 기반 모델 부모 컨테이너, 다른 뷰와의 상대적 위치로 화면 구성 |
프레임 레이아웃 (FrameLayout) |
싱글(Single) 모델 가장 상위의 뷰, 뷰그룹을 보여주는 방법 여러 개의 뷰를 중첩 후 각 뷰를 전환하여 보여주는 방식으로 주로 이용 |
테이블 레이아웃 (TableLayout) |
격자(Grid)모델 격자 모양의 배열을 사용하여 화면을 구성, HTML에서 사용하는 정렬 방식과 유사 |
이 중에서 가장 많이 쓰이고 간단한 레이아웃은 리니어 레이아웃입니다.
방향 설정하기
세로방향 | android:orientation="vertical" |
가로방향 | android:orientation="horizontal" |
정렬 방향 정하기
정렬 속성 | 설명 |
layout_gravity |
부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않아 여유 공간 안에서 뷰를 원하는 곳에 정렬할 수 있음 - layout_width나 layout_height 속성을 wrap_content로 할 경우 같이 사용할 수 있음 |
gravity | 뷰에서 화면에 표시하는 내용물을 정렬할 때 |
gravity 속성으로 지정할 수 있는 값
정렬 속성값 | 설명 |
top | 위쪽 끝에 배치 |
bottom | 아래쪽 끝에 배치 |
left | 왼쪽 끝에 배치 |
right | 오른쪽 끝에 배치 |
center_vertical | 세로방향의 중앙에 배치 |
center_horizontal | 가로뱡향의 중앙에 배치 |
fill_vertical | 세로방향으로 여유 공간만큼 채워서 배치 |
fill_horizontal | 가로방향으로 여유 공간만큼 채워서 배치 |
center | 세로*가로 방향의 중앙에 배치 |
filll | 세로*가로 방향의 여유 공간만큼 채워서 배치 |
clip_vertical |
상하 길이가 여유공간보다 클 경우 잘라서 배치 topclip_vertical : 아래쪽에 남는 부분 잘라내기 bottonclip_vertical : 위쪽에 남는 부분 잘라내기 center_verticalclip_vertical : 위쪽과 아래쪽에 남는 부분 잘라내기 |
clip_horizontal |
좌우 길이가 여유공간보다 클 경우 잘라서 배치 rightclip_horizontal : 왼쪽에 남는 부분 잘라내기 leftclip_horizontal : 오른쪽에 남는 부분 잘라내기 center_horizontalclip_horizontal : 왼쪽과 오른쪽에 남는 부분 잘라내기 |
- 텍스트뷰를 이용시 옆의 텍스트 뷰나 버튼에 들어있는 텍스트와 높이가 맞지 않는 경우 basedlineAligned 속성 사용 가능. ( 텍스트의 정렬이 우선시 되므로 어떤 정렬을 우선 적용할 것인가에 따라 선택적으로 지정해야함 )
여유 공간 설정하기
layout_margin | 부모 컨테이너의 여유 공간과 뷰 사이의 여백을 주는 방법 |
padding | 뷰 안의 내용물인 텍스트나 이미지와 뷰 안의 영역 사이의 여백을 주는 방법 |
공간가중치 설정하기
layout_width |
부모 컨테이너의 여유 공간을 여러 개의 뷰들에게 분할해줌 ex) 두 개의 뷰에 각각 '1'의 값을 지정하면 반으로 분할, '1'과 '2'로 지정 시 각각 1/3과 2/3으로 분할하여 할당. |
[참고] Do it! 안드로이드 앱 프로그래밍