일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 수명주기
- 안드로이드
- 레이아웃
- 뷰
- Swift
- 코드리뷰
- 안드로이드 스튜디오
- 자바
- 스낵바
- 테이블_레이아웃
- 서비스
- 상대 레이아웃
- 아이폰
- 텍스트뷰 스크롤
- RecyclerView
- 액션바
- 텍스트뷰 자동 스크롤
- edwith
- 리니어 레이아웃
- 프로젝트
- 부스트코스
- 드로어블
- 코틀린
- IOS
- 데이터베이스
- 제약 레이아웃
- textview auto scroll
- 안드로이드_프로그래밍
- 프로그래밍
- SceneDelegate
- Today
- Total
듀다의 성장개발로그
[부스트코스] 안드로이드 프로그래밍 03 - 제약 레이아웃과 상대 레이아웃 본문
오늘은 대표 레이아웃 중 두 가지인 제약 레이아웃과 상대 레이아웃에 대해 설명하겠습니다.
제약 레이아웃
프로젝트를 처음 만들었을때 기본으로 설정되는 레이아웃이 이 제약 레이아웃인데요,
제약 레이아웃이란 제약 조건에 따라 위젯을 배치하는 레이아웃입니다.
여기서 제약 조건이란 새로 추가할 위젯과 부모 레이아웃이나 다른 뷰의 가장자리와의 연결점입니다. 제약 레이아웃은 이 연결점을 통하여 위치를 설정합니다.
예를 들면 새로 추가한 위젯의 위 아래 두 면을 부모 레이아웃과 연결하면 위 아래 중 가운데 높이에 위치하게 됩니다. 위로 여백을 10dp만큼 주면 정가운데에서 10dp만큼 내려간 위치에 위젯이 위치하게 됩니다.
주의할 점은 한 면만 연결하면 위치가 지정되지 않는다는 점입니다. 왜냐하면, 한 면만 연결되었을 때는 그 위젯이 위 아래 공간 중 어디에 위치해야 할 지 알 수가 없기 때문입니다.
상대 레이아웃
상대 레이아웃도 제약 레이아웃과 마찬가지로 부모 레이아웃이나 다른 뷰와의 상대적인 위치로 위젯의 위치를 결정하는 레이아웃입니다. 제약 레이아웃과 상대 레이아웃의 차이점은, 제약 레이아웃은 연결된 두 면의 가운데에서 마진값 만큼 이동시키는데, 상대 레이아웃은 오로지 연결된 면과의 마진에 따라서만 위치가 결정된다는 점입니다.
그림으로 설명드리겠습니다.
부모 레이아웃과 상하좌우 모두 연결된 버튼이 한 개 있고 여백이 모두 0dp라면 제약 레이아웃과 상대 레이아웃 모두 위와 같은 모습으로 화면에 나타날 것입니다.
그런데 왼쪽 마진을 10dp로 설정하면 상대 레이아웃은 왼쪽 면의 부모 레이아웃과의 거리가 10dp가 되고, 제약 레이아웃은 왼쪽 면이 10dp 멀어지게 됩니다. 차이가 눈에 들어오시나요? 같은 개념을 사용하는 레이아웃이지만 위치 설정 방법에 차이가 있습니다.
생각해 보기
- 레이아웃 안에 레이아웃을 넣는 방식으로 3~4개의 레이아웃을 중첩시켜 넣은 후 그 안에 버튼을 넣으면 하나의
레이아웃 안에 버튼을 넣었을 때와 다른 점이 있을까요? 어떤 경우에 이렇게 만들까요?
- 버튼의 위치가 다르게 결정될 것이라고 생각합니다. 여러 가지 버튼을 각각 달리 배치해야 할 때 이런 방법을 사용하면 좋을 것이라 생각합니다.
- 제약 레이아웃 안에 두 개의 버튼을 넣고 하나의 버튼을 다른 버튼과 연결하여 위치시키면
하나의 버튼을 움직였을 때 다른 버튼도 따라 움직일까요?
- 따라 움직입니다. 연결된 버튼의 제약조건이 다른 버튼이니까요. - 상대 레이아웃을 잘 사용할 수 있다면 다른 레이아웃은 필요 없는 걸까요?
- 상대 레이아웃만 잘 사용해도 필요한 화면을 모두 만들 수는 있으나, 위치가 상대적으로 결정된다는 점에서 사용을 지양해야 하는 경우가 있을 것이라고 생각합니다. - 리니어 레이아웃과 상대 레이아웃을 잘 조합해서 사용하는 방법을 생각해보세요.
- 리니어 레이아웃 안에 상대 레이아웃을 배치하거나 상대 레이아웃 안에 리니어 레이아웃을 배치하면 효과적으로 사용할 수 있습니다. 예를 들면 리니어 레이아웃에서 버튼을 한 방향으로 쌓아 채우고, 그것을 상대 레이아웃 안에 넣으면 빼곡히 채워진 여러 가지 버튼을 원하는 위치에 놓을 수 있겠죠. - 화면에 보이는 뷰들의 일부가 겹쳐있도록 만들 수도 있을까요?
- 여러 개 배치하고 서로 연결하지 않은 채로 마진 값을 잘 설정하면 일부가 겹쳐있는 뷰를 볼 수 있습니다.
이번 포스팅은 부스트코스 강의와 내용과 구성이 조금 다르게 되었습니다. 상대 레이아웃과 제약 레이아웃의 차이에 대한 호기심 덕분에 이런 구성이 나오게 되었는데, 강의를 보면서 궁금해지거나 더 공부해볼만한 부분이 생기면 추가로 포스팅하는것도 좋은 방법인 것 같습니다. [부스트코스]에서도 매 강의마다 질문을 던져서 강의 내용에 대한 응용이나 나아가 생각하는 것을 권장하니까요.
'안드로이드 > 부스트코스' 카테고리의 다른 글
[부스트코스] 안드로이드 프로그래밍 05 - 드로어블 (0) | 2020.02.04 |
---|---|
[부스트코스] 안드로이드 프로그래밍 04 - 리니어 레이아웃 (0) | 2020.02.03 |
[부스트코스] 안드로이드 프로그래밍 02 - 뷰와 레이아웃 (0) | 2020.02.03 |
[부스트코스] Tip! imports on the fly를 활성화해야 하는 이유 (0) | 2020.02.03 |
[부스트코스] Tip! AMD CPU에서 안드로이드 스튜디오 AVD 사용하는 방법 (0) | 2020.02.03 |