1. 레이아웃 개념
레이아웃은 ViewGroup 클래스로부터 상속받으며 내부에 무엇을 담는 용도로 쓰임. 즉 레이아웃 안에 존재하는 위젯을 배치하게 해준다.
레이아웃 중에서 가장 많이 사용되는 것은 리니어레이아웃이며, 이를 선형 레이아웃이라고도 함
레이아웃의 대표적인 속성
속성 | 설명 |
orientation | 레이아웃 안에 배치할 위젯의 수직 또는 수평 방향을 설정 |
gravity | 레이아웃 안에 배치할 위젯의 정렬방향을 좌측, 우측, 중앙 등으로 설정 |
padding | 레이아웃 안에 배치할 위젯의 여백을 설정 |
layout_weight | 레이아웃이 전체 화면에서 차지하는 공간의 가중값을 설정 여러 개의 레이아웃이 중복될 때 주로 사용 |
baselineAligned | 레이아웃 안에 배치할 위젯을 보기 좋게 정렬 |
2. 레이아웃의 종류
종류 | 설명 |
LinearLayout (선형 레이아웃) | 레이아웃의 왼쪽 위부터 아래쪽 또는 오른쪽으로 차례로 배치 |
RelativeLayout(상대 레이아웃) | 위젯 자신이 속한 레이아웃의 상하좌우 위치를 지정하여 배치하거나 다른 위젯으로부터 상대적인 위치를 지정 |
TableLayout | 행과 열의 개수를 지정한 테이블 형태로 위젯을 배열 |
GridLayout | 테이블레이아웃과 비슷하지만 행 또는 열을 확장하여 다양하게 배치할 때 더 편리 |
FrameLayout | 위젯을 왼쪽 위에 일률적으로 겹쳐서 배치하여 중복되어 보이는 효과를 낼 수 있음 여러 개의 위젯을 배치한 후 상황에 따라서 필요한 위젯을 보이는 방식을 주로 활용 리니어레이아웃만으로도 대부분의 레이아웃 형태를 구성할 수 있어 리니어레이아웃의 사용도가 가장 높음. |
1) 리니어 레이아웃
기본 리니어레이아웃의 형태
📍 orientation
리니어레이아웃의 가장 기본적인 속성은 orientation이며, 값으로 vertical과 horizontal을 설정. vertical은 레이아웃 안에 포함될 위젯의 배치를 왼쪽 위부터 수직방향으로 쌓겠다는 의미이고, horizontal은 수평 방향으로 쌓겠다는 의미
📍 gravity와 layout_gravity
gravity 속성으로 레이아웃 안의 위젯을 어디에 배치할 것인지를 결정하며 값으로 left, right, center, top, bottom 등을 사용할
수 있음. 2개를 조합하여 right|bottom 처럼 사용할 수 있는데, 오른쪽 아래에 정렬한다는 의미
gravity 속성이 자신에게 포함된 자식(주로 위젯)을 어디에 위치시킬지를 결정한다면, layout_gravity 속성은 자신의 위치를 부모(주로 레이아웃)의 어디에 위치시킬지 결정. 그래서 gravity는 레이아웃에, layout_gravity는 위젯에 주로 지정.
📍 baselineAligned
baselineAligned 속성은 크기가 다른 위젯들을 보기 좋게 정렬해주는 것으로 true와 false를 지정.
baselineAligned 속성의 디폴트 값은 true이므로 생략해도 잘 배치되기 때문에 특별히 신경 쓰지 않아도 됨.
2) 중복 리니어레이아웃 형태
한 화면에 위젯을 수평과 수직으로 다양하게 배치해야 하는 경우, 리니어레이아웃 안에 리니어레이아웃을 생성하는 방식을 사용.
📍 layout_weight
리니어레이아웃을 여러 개 사용할 경우 각 레이아웃의 크기를 지정해야 함. 레이아웃을 화면 전체에 채워야 하기 때문에 dp, px 등의 단위로 지정하기 보다는 주로 전체 화면에 대한 비율(%)로 지정. 이 때 사용하는 것이 layout_weight 속성.
중첩 LinearLayout xml 파일로 구현
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center"
android:orientation="vertical"
android:layout_weight="1">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#C7ECC7"
android:gravity="center"
android:orientation="horizontal"
android:layout_weight="2">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼3" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼4" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#B5B5F6"
android:gravity="center"
android:orientation="vertical"
android:layout_weight="1">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼5" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼6" />
</LinearLayout>
</LinearLayout>
[ 내용 참고 : IT 학원 강의 ]
'Android Studio' 카테고리의 다른 글
[Android Studio] 파일 처리 | openFileInput() & openFileOutput() & openRawResource() (0) | 2024.05.01 |
---|---|
[Android Studio] 날씨와 시간 위젯 | 자동완성 텍스트뷰 위젯 | 진행상태 표시 위젯 (0) | 2024.04.29 |
[Android Studio] 테이블 레이아웃, 그리드 레이아웃, 프레임 레이아웃 (1) | 2024.04.25 |
[Android Studio] relative layout (0) | 2024.04.25 |
[Android Studio] 기본 위젯 (0) | 2024.04.25 |