선형 레이아웃 만들기

Compose 방법 사용해 보기
Jetpack Compose는 Android에 권장되는 UI 도구 키트입니다. Compose에서 레이아웃을 사용하는 방법을 알아보세요.

LinearLayout는 모든 하위 요소를 세로 또는 가로로 한 방향으로 정렬하는 뷰 그룹입니다. android:orientation 속성을 사용하여 레이아웃 방향을 지정할 수 있습니다.

세로로 3개로 분할된 레이아웃을 보여주는 이미지
그림 1. 가로 방향 하위 요소 3개가 있는 LinearLayout

LinearLayout의 모든 하위 요소는 차례로 스택되므로 세로 목록은 너비에 관계없이 행당 하나의 하위 요소만 갖습니다. 가로 목록은 높이가 한 행뿐이며 가장 큰 하위 요소의 높이에 패딩을 더한 값입니다. LinearLayout는 하위 요소 사이의 여백과 각 하위 요소의 중력(오른쪽, 가운데, 왼쪽 정렬)을 준수합니다.

레이아웃 가중치

LinearLayoutandroid:layout_weight 속성을 사용하여 개별 하위 요소에 가중치를 할당하는 것도 지원합니다. 이 속성은 화면에서 차지하는 공간의 양 측면에서 뷰에 '중요도' 값을 할당합니다. 가중치 값이 클수록 상위 뷰의 나머지 공간을 채우도록 확장됩니다. 하위 뷰는 가중치 값을 지정할 수 있으며 뷰 그룹의 남은 공간은 선언된 가중치에 따라 하위 요소에 비례하여 할당됩니다. 기본 가중치는 0입니다.

균등 분포

각 하위 요소가 화면에서 동일한 공간을 사용하는 선형 레이아웃을 만들려면 세로 레이아웃의 경우 각 뷰의 android:layout_height"0dp"로 설정하고 가로 레이아웃의 경우 각 뷰의 android:layout_width"0dp"로 설정합니다. 그런 다음 각 뷰의 android:layout_weight"1"로 설정합니다.

비균등 분포

하위 요소가 화면에서 다른 크기의 공간을 사용하는 선형 레이아웃을 만들 수도 있습니다. 다음 예를 고려하세요.

  • 가중치 값이 1인 텍스트 필드 2개와 기본 가중치 값이 0인 세 번째 텍스트 필드 3개가 있다고 가정해 보겠습니다. 가중치 값이 0인 세 번째 텍스트 필드는 콘텐츠에 필요한 영역만 차지합니다. 가중치 값이 1인 다른 두 텍스트 필드는 세 필드의 콘텐츠가 모두 측정된 후 남은 공간을 균등하게 채우도록 확장됩니다.
  • 두 개의 가중치 값이 1이고 세 번째 텍스트 필드의 가중치가 2인 텍스트 필드가 세 개 있다면 세 필드의 콘텐츠가 측정된 후 남은 공간은 다음과 같이 할당됩니다. 가중치 값이 2인 필드에 절반을, 가중치 값이 1인 필드 간에 절반을 동일하게 나눕니다.

다음 그림과 코드 스니펫은 '메시지 전송' 활동에서 레이아웃 가중치가 작동하는 방식을 보여줍니다. To 필드, Subject 줄, Send 버튼은 각각 필요한 높이만 차지합니다. 메시지 영역은 활동 높이의 나머지 부분을 차지합니다.

세로 방향 LinearLayout에서 EditText 3개와 Button 1개를 보여주는 이미지
그림 2. 세로 방향 LinearLayout에 텍스트 필드 3개와 버튼 1개가 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:text="@string/send" />
</LinearLayout>

LinearLayout의 각 하위 뷰에서 사용할 수 있는 속성에 관한 자세한 내용은 LinearLayout.LayoutParams를 참고하세요.