아래의 글은 BOOSTER 서포터즈로 활동했던 zhfpt***님이
작성한 부스트코스 후기입니다.
여러분들의 성원에 더 노력하는 부스트코스가 되겠습니다.
감사합니다.
******************************************
1)링크: https://blog.naver.com/zhfptm12/221796453994
2)작성날짜: 20/02/04
이번 강의에서 알아볼 내용은 상대 레이아웃입니다. 이름의 '상대' , 말 그대로 레이아웃이나 다른 뷰 들의 상대적 위치를 이용해 화면을 배치하는 레이아웃입니다.
그럼 이제 상대 레이아웃, 부모 레이아웃과의 상대적 위치, 다른 뷰와의 상대적 위치를 키워드로 알아보겠습니다.
상대 레이아웃(RelativeLayout)
상대 레이아웃은 다른 뷰나 부모 뷰와의 상대적인 위치를 이용해 뷰를 배치하는 방법입니다. 아래 사진과 같은 개념입니다.
부모 레이아웃과의 상대적 위치
상대 레이아웃이 어떤 뷰를 담고 있다면, 뷰의 입장에서는 상대 레이아웃이 부모 레이아웃이 되게 됩니다.
뷰를 부모 레이아웃 아래쪽에 붙이고 싶다면 android:layout_alignParentBottom = "true"라고 설정하면 됩니다.
부모 레이아웃과의 상대적 위치를 지정할 때 사용하는 속성으로는 layout_alignParentTop, layout_alignParentBottom, layout_alignParentLeft, layout_alignParentRight 등이 있습니다.
부모 레이아웃의 가운데에 배치하기 위한 layout_centerInParent 속성도 있습니다.
다른 뷰와의 상대적 위치
다른 뷰와의 상대적 위치를 지정할 때 사용하는 속성으로는 layout_toLeftOf, layout_toRightOf, layout_alignTop, layout_alignBottom 등이 있습니다.
리니어 레이아웃을 이용해 화면을 배치할 때 쉽게 되지 않는 것 중의 하나가 위, 아래에 뷰를 두고 가운데에 또 다른 뷰를 두면서 꽉 차게 만드는 것입니다.
그 이유는 가운데 뷰를 꽉 차게 하려면 layout_height를 match_parent로 설정해야 합니다. 그렇게 되면 맨 아래 뷰가 가려져 보이지 않게 되는 문제가 생깁니다.
하지만 상대 레이아웃을 이용하면 간단하게 해결할 수 있습니다.
A 뷰는 android:layout_alignParentTop = "true"
B 뷰는 android:layout_below = "@+id/A" , android:layout_above = "@+id/C"
C 뷰는 android:layout_alignParentBottom = "true"
라고 속성값을 주면 됩니다.
<생각해보기>
1. 상대 레이아웃을 잘 사용할 수 있다면 다른 레이아웃은 필요 없는 걸까요?
- 각 레이아웃마다 장점이 되는 부분이 있기 때문에, 상황에 맞게 사용해야 합니다.
2. 리니어 레이아웃과 상대 레이아웃을 잘 조합해서 사용하는 방법을 생각해보세요.
- 상대 레이아웃 안에 리니어 레이아웃을 배치해서 구역을 나눠 뷰들을 정렬시킬 수 있을 것 같습니다.
3. 화면에 보이는 뷰들의 일부가 겹쳐있도록 만들 수도 있을까요?
- 뷰에 below 나 above 속성을 주지 않는다면 가능할 것 같습니다.
[출처] [부스트 코스] 안드로이드 - 상대 레이아웃 01주 차|작성자 zhfptm12