[Andriod_04] 대표적인 뷰그룹 _RelativeLayout

11783 단어 TILandroidTIL

📝RelativeLayout


자식 뷰를 서로의 관계에 따라 배치하는 속성과 뷰 그룹


📍클래스 계층 관계도


📍RelativelLayout의 기본속성

android:gravity
android:ignoreGravity

🙋‍♀️android:gravity

  • RelativeLayout 범위 안에서 뷰를 어디에 배치할지 위치를 결정
  • gravity ="속성값"

속성값

  • top : 상단에 배치
  • bottom : 하단에 배치
  • left : 좌측에 배치
  • right : 우측에 배치
  • center_vertical : 수직 중앙에 배치
  • center_horizontal : 수평 중앙에 배치
  • center : 정 중앙에 배치

뷰가 전체적으로 오른쪽에 배치

🙋‍♀️android:ignoreGravity
특정 자식뷰의 중력값을 무시하기 위해 사용하는 것

  • 활용은 많이 하지 않음
  • ignoreGravity="@+타입/이름
    ignoreGravity="@+id/view2
    • id가 @id/view2인 뷰의 gravity를 무시

📍RelativeLayout.LayoutParams 속성

🙋‍♀️부모 뷰그룹과의 관계 배치 속성들
layout_alignParentLeft="true/false" 부모 영역 내 좌측에 배치
layout_centerHorizontal="true/false" 부모 영역 내 수평 중앙 배치
layout_alignParentRight="true/false" 부모 영역 내 우측에 배치
layout_alignParentTop="true/false" 부모 영역 내 상단에 배치
layout_alignParentVertical="true/false" 부모 영역 내 수직 중앙에 배치
layout_alignParentBottom="true/false" 부모 영역 내 하단에 배치
layout_CenterInParent="true/false" 부모 영역 내 정 중앙에 배치

아무 설정도 하지 않았을 경우 디폴트 값 : left/Top

기준뷰로의 활용

  • 부모 뷰그룹과의 관계 배치 속성들은 기준뷰로 많이 활용됨
    • 기준뷰 : 다른 자식뷰들을 배치하는데 기준이 되는 뷰
  • 첫 번째 뷰는 기준이 되는 다른 자식뷰들이 없기 때문에 부모 뷰그룹과의 관계로 배치를 하게 됨

🙋‍♀️자식 뷰 간의 관계 배치 속성들
layout_above="기준뷰 id" 기준뷰 상단 위에 배치
layout_alignTop="기준뷰 id" 기준뷰 상단에 자식뷰의 상단을 맞춰 배치
layout_below="기준뷰 id" 기준뷰 하단 아래에 배치
layout_alingBottom="기준뷰 id" 기준뷰 하단에 자식뷰의 하단을 맞춰 배치
layout_toLeftOf="기준뷰 id" 기준뷰 좌측 왼쪽에 배치
layout_alignLeft="기준뷰 id" 기준뷰 좌측에 자식뷰의 좌측을 맞춰 배치
layout_toRightOf="기준뷰 id" 기준뷰 오른쪽에 배치
layout_alignRight="기준뷰 id" 기준뷰 오른쪽에 자식뷰의 오른쪽을 맞춰 배치
layout_alignBaseline="기준뷰 id" 기준뷰의 텍스트에 자식뷰의 텍스를 맞춰 배치

  • 모두 외우기는 힘들기 때문에 붙여놓고 계속 보고 사용하면서 자연스럽게 외우기

🙋‍♀️layout_alignWithParentIfMissing
관계에 의해 배치된 뷰들은 하나의 뷰가 사라지면서 관계가 끊어지면 전체적인 배치에 문제가 생길 수도 있음!!

Case 1 : 자식뷰 중 하나가 없어졌을 때

  • view2가 사라졌지만 view3는 view1을 참조함
  • 사라진 뷰의 참조를 따라감

Case 2 : 기준뷰가 사라졌을 때

  • alignWithParentIfMissing = false
    • 기준뷰를 참조하던 뷰가 기준뷰가 됨
    • 부모 뷰그룹과의 관계에서 디폴트값인 Left/Top으로 위치가 이동됨
    • view2를 참조하던 이후의 자식뷰들은 전체적인 배열이 무너지게 됨

  • alignWithParentIfMissing = ture
    • 사라진 기준뷰가 참조하던 뷰의 속성을 따라감

많이 사용하지는 않지만 RelativeLayout은 관계형 배치 방식이므로 관계가 끊어진 경우를 반드시 고려해야 함!!


📍레이아웃의 유연성과 관련된 속성들의 조합

RelativeLayout은 각 속성들의 조합으로 레이아웃 유연성을 지원함
ex)

  • layout_alienLeft + layout_alienRight = 적용된 자식뷰가 기준뷰의 너비만큼 늘어남
  • layout_alignTop + layout_alignBottom = 적용된 자식뷰가 기준뷰의 높이만큼 늘어남
  • layout_toLeftOf + layout_alignTop + layout_alignParentRight = 기준뷰와 상단을 맞추고, 기준뷰 오른쪽부터 전체 레이아웃의 오른쪽 끝까지 자식뷰의 너비가 늘어남

<?xml version="1.0" encoding="utf-8"?>
<android.widget.RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relative"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/view1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="View1" />

    <Button
        android:id="@+id/view2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/view1"
        android:layout_toLeftOf="@id/view3"
        android:text="View2" />

    <Button
        android:id="@+id/view3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="View3" />


</android.widget.RelativeLayout>

  • 다양한 조합을 활용해서 원하는 부분을 가변적으로 만들어 유연하게 레이아웃을 만들 수 있음

좋은 웹페이지 즐겨찾기