본문 바로가기

Android

[Android] Layouts

ConstraintLayout

 

ConstraintLayout은 레이아웃 구성 시 뷰, 위젯 등의 위치와 크기를 유연하게

조절할 수 있게 만들어 주는 레이아웃입니다.

 

Constraint의 뜻을 보면 

제약, 조건, 제한, 구속이라는 뜻이 존재하는데 이는

레이아웃에 배치되는 뷰들에 여러 제약을 적용하여 각 뷰의 위치와 크기를 결정합니다.

 

여기서 말하는 제약이란.

특정 뷰 왼쪽으로 지정된 뷰를 오른쪽 사이드에 맞추거나 

뷰의 왼쪽 오른쪽을 각각 부모 레이아웃의 왼쪽 오른쪽에 맞추는 것 등을 말하며 이러한 각각의 제약은 

ConstraintLayout이 가지는 하나의 레이아웃 속성으로 매핑됩니다.

 

기본 속성 사용법

 

ConstraintLayout에서 제공하는 속성의 이름은 "layout_constraint"로

시작하며 이어서 구체적인 제약 조건이 명시됩니다.

layout_constraintXXX (XXX = 제약 조건)

예를 들어 A라는 왼쪽에 있는 뷰의 오른쪽에 배치하는 속성은 

"layout_constraint"에 "Left_toRightOf"라는 제약 조건을 결합한

 "layout_constraintLeft_toRightOf"입니다

속성을 넣기 전

 

속성을 넣은 후


LinearLayout

 

LinearLayout은 사용이 간편하고 표시 형태가 직관적이며 UI 요소들을 일렬로 배치할 수 있어서

안정감 있는 화면 구성이 가능합니다.

 

사용법

 

단순히 버튼 두 개만 넣어도 아래의 사진처럼 가로 방향으로 나열된 버튼을 확인할 수 있습니다.

수직 수평

 

orientation속성을 사용하여 View들의 배치 방향을 가로/세로로 바꿀 수 있습니다.

android:orientation="horizontal" //가로
android:orientation="vertical" //세로

weight를 이용한 영역 분할

 

위와 같이 View들이 LinearLayout의 왼쪽 영역에만 배치되어있고 가로/세로 전체 영역을 차지하도록 만든 방법에는

weight가 있습니다.

android:layout_weight
  • 소수점 단위 사용 가능
  • 특정 단위가 아닌 전체에 대한 비율의 개념으로 사용
  • 지정하지 않은 기본 값은 0
  • 가중치가 적용되는 방향의 width 또는 height 값이 0dp 이어야 함
 <Button
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="Button" />
    
    <Button
        android:id="@+id/button3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="Button" />

 

위의 코드를 입력해 보면 전체 (2+3+3)의 크기를 기준으로

각각의 button들이 2 : 3 : 3 만큼의 공간을 차지하게 됩니다.

 

또한 Layout부분에 아래의 코드를 추가하면 가중치의 값을 설정할 수 있으며

View의 가중치 총합이 아래 10이 되지 않을 경우 

공백이 포함된 화면을 구성할 수 있습니다.

android:weightSum="10"

여기서 공백의 가중치는 총 10-(2+3+3) = 2입니다.


FrameLayout

 

FrameLayout은 추가된 여러 뷰 위젯 중 하나를 Layout에 표시할 때 사용하는 레이아웃입니다.

Frame은 말 그대로 액자라는 것을 생각해보면 됩니다.

보통은 액자에 있는 사진을 빼고 새로운 사진을 끼워서 사용합니다.

FrameLayout의 주 용도는 액자처럼 화면에 표시될 View를 바꿔가며 표시하기 위함입니다.

 

FrameLayout에 처음에 표시될 뷰는 XML코드의 가장 마지막에 추가된 뷰입니다.

 

위와 같이 3개의 Button을 만들었지만 마지막에 배치된 Button3가 제일 앞에 있는 것을 확인하실 수 있습니다.

 

하지만 안드로이드에서는 여러 뷰를 동시에 표시해야 하는 확실한 의도가 없는 한

FrameLayout은 오직 하나의 뷰를 표시하게 만들도록 권고하고 있습니다.

 


TableLayout

 

TableLayout은 표 형태의 레이아웃을 만들 떄 사용하는 Layout입니다.

일반적인 표는 가로방향인 열과 세로방향은 행으로 구성됩니다.

 

TableLayout도 비슷하게 하나의 행을 추가할 떄는 <TableRow>라는 요소를 사용 하며 열을 추가하는 요소는 없지만

<TableRow>에 뷰를 추가하면 새로운 열이 추가 됩니다.

 <TableRow>
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />
		...x 3
    </TableRow>
    
    <TableRow>
        <Button
            android:id="@+id/button7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />
        ...x 2
    </TableRow>

    <TableRow>
        <Button
            android:id="@+id/button9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />
    </TableRow>

위와 같이 코드를 작성 하면 아래와 같이 배치가 되는 것을 확인할 수 있습니다.

 

열의 너비는 여러 개의 뷰 중 가장 큰 뷰의 너비에 맞춰집니다.

 

 


 

'Android' 카테고리의 다른 글

[Android] View Binding  (0) 2021.02.01
[Adroid] Activity LiftCycle  (0) 2021.02.01
[Android] Palette (Helper)  (0) 2021.01.27
[Android] Focus  (0) 2021.01.27