레이아웃 리소스

레이아웃 리소스는 Activity의 UI 또는 UI 구성요소의 아키텍처를 정의합니다.

파일 위치:
res/layout/filename.xml
파일 이름은 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
View(또는 서브클래스) 리소스를 가리키는 리소스 포인터입니다.
리소스 참조:
Java의 경우: R.layout.filename
XML의 경우: @[package:]layout/filename
문법:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

참고: 루트 요소는 ViewGroup, View 또는 <merge> 요소가 될 수 있지만, 루트 요소는 하나만 있을 수 있으며 위와 같이 android 네임스페이스를 사용하는 xmlns:android 속성을 포함해야 합니다.

요소:
<ViewGroup>
다른 View 요소의 컨테이너. 다양한 ViewGroup 객체가 있으며 각 객체를 사용하여 여러 방식으로 하위 요소의 레이아웃을 지정할 수 있습니다. ViewGroup 객체에는 LinearLayout, RelativeLayout, FrameLayout 등이 있습니다.

ViewGroup의 모든 파생 객체가 중첩된 뷰를 허용한다고 가정해서는 안 됩니다. 일부 뷰 그룹은 AdapterView 클래스를 구현한 것이며 이 클래스는 Adapter에서만 하위 요소를 결정합니다.

속성:

android:id
리소스 ID. 요소의 고유한 리소스 이름이며 이를 사용하여 애플리케이션에서 ViewGroup의 참조를 가져올 수 있습니다. 자세한 내용은 android:id의 값 섹션을 참고하세요.
android:layout_height
크기 또는 키워드. 필수사항. 크기 값(또는 크기 리소스) 또는 키워드("match_parent" 또는"wrap_content")로, 그룹의 높이입니다. 자세한 내용은 android:layout_height 및 android:layout_width의 값 섹션을 참고하세요.
android:layout_width
크기 또는 키워드. 필수사항. 크기 값(또는 크기 리소스) 또는 키워드("match_parent" 또는 "wrap_content")로, 그룹의 너비입니다. 자세한 내용은 android:layout_height 및 android:layout_width의 값 섹션을 참고하세요.

ViewGroup 기본 클래스는 더 많은 속성을 지원하며 ViewGroup의 각 구현에서 그보다 더 많은 속성이 지원됩니다. 사용 가능한 모든 속성의 참조는 ViewGroup 클래스의 대응하는 참조 문서를 확인하세요(예: LinearLayout XML 속성).

<View>
일반적으로 위젯이라고 하는 개별 UI 구성요소입니다. View 객체에는 TextView, Button, CheckBox 등이 있습니다.

속성:

android:id
리소스 ID. 요소의 고유한 리소스 이름이며 이를 사용하여 애플리케이션에서 View의 참조를 가져올 수 있습니다. 자세한 내용은 android:id의 값 섹션을 참고하세요.
android:layout_height
크기 또는 키워드. 필수사항. 크기 값(또는 크기 리소스) 또는 키워드("match_parent" 또는"wrap_content")로, 요소의 높이입니다. 자세한 내용은 android:layout_height 및 android:layout_width의 값 섹션을 참고하세요.
android:layout_width
크기 또는 키워드. 필수사항. 크기 값(또는 크기 리소스) 또는 키워드("match_parent" 또는 "wrap_content")로, 요소의 너비입니다. 자세한 내용은 android:layout_height 및 android:layout_width의 값 섹션을 참고하세요.

View 기본 클래스는 더 많은 속성을 지원하며 View의 각 구현에서 그보다 더 많은 속성이 지원됩니다. 자세한 내용은 레이아웃을 참고하세요. 사용 가능한 모든 속성의 참조는 대응하는 참조 문서를 확인하세요(예: TextView XML 속성).

<requestFocus>
View 객체를 나타내는 모든 요소는 빈 요소를 포함할 수 있고 이 빈 요소는 화면에서 상위 요소에 초기 포커스를 줍니다. 이러한 요소는 파일당 하나만 포함할 수 있습니다.
<include>
레이아웃에 레이아웃 파일을 포함합니다.

속성:

layout
레이아웃 리소스. 필수사항. 레이아웃 리소스 참조입니다.
android:id
리소스 ID. 포함된 레이아웃에서 루트 뷰에 지정된 ID를 재정의합니다.
android:layout_height
크기 또는 키워드. 포함된 레이아웃에서 루트 뷰에 지정된 높이를 재정의합니다. android:layout_width도 선언된 경우에만 유효합니다.
android:layout_width
크기 또는 키워드. 포함된 레이아웃에서 루트 뷰에 지정된 너비를 재정의합니다. android:layout_height도 선언된 경우에만 유효합니다.

<include> 내에 포함된 레이아웃에서 루트 요소에 의해 지원되는 다른 모든 레이아웃 속성을 포함할 수 있고 그러한 속성은 루트 요소에 정의된 속성을 재정의합니다.

주의: <include> 태그를 사용하여 레이아웃 속성을 재정의하려면 다른 레이아웃 속성을 적용하기 위해 android:layout_heightandroid:layout_width를 모두 재정의해야 합니다.

레이아웃을 포함하는 또 다른 방법은 ViewStub을 사용하는 것입니다. ViewStub은 가벼운 뷰로서, 명시적으로 확장될 때까지 레이아웃 공간을 소비하지 않으며 명시적으로 확장하면 android:layout 속성에 의해 정의된 레이아웃 파일을 포함합니다. ViewStub을 사용하는 방법에 관한 자세한 내용은 주문형 뷰 로드를 참고하세요.

<merge>
레이아웃 계층 구조에 그려지지 않은 대체 루트 요소입니다. 루트 요소로 이 요소를 사용하면 이 레이아웃이 이미 적절한 상위 View를 포함하여 <merge> 요소의 하위 요소를 포함하는 레이아웃에 배치되는 경우에 유용합니다.

<include>를 사용하여 이 레이아웃을 다른 레이아웃 파일에 포함하고 이 레이아웃이 다른 ViewGroup 컨테이너가 필요하지 않을 때에 특히 유용합니다. 레이아웃 병합에 관한 자세한 내용은 <include>로 레이아웃 재사용을 참고하세요.

android:id의 값

ID 값의 경우 일반적으로 다음 예와 같이 "@+id/name" 문법 형식을 사용합니다. 더하기 기호(+)는 새 리소스 ID를 나타내며 리소스 정수가 아직 존재하지 않는다면 aapt 도구는 R.java 클래스에 새 리소스 정수를 만듭니다.

<TextView android:id="@+id/nameTextbox"/>

이제 nameTextbox 이름은 이 요소에 연결된 리소스 ID입니다. 그런 다음 Java에서 ID에 연결된 TextView를 참조할 수 있습니다.

Kotlin

val textView: TextView? = findViewById(R.id.nameTextbox)

Java

TextView textView = findViewById(R.id.nameTextbox);

이 코드는 TextView 객체를 반환합니다.

하지만 이미 ID 리소스를 정의했고 아직 사용하지 않았다면 android:id 값에서 더하기 기호를 제외하여 View 요소에 ID를 적용할 수 있습니다.

android:layout_height 및 android:layout_width의 값

높이 및 너비 값은 Android에서 지원하는 모든 크기 단위(px, dp, sp, pt, in, mm) 또는 다음의 키워드를 사용하여 표현됩니다.

설명
match_parent 상위 요소의 크기와 일치하도록 크기를 설정합니다. fill_parent를 지원 중단하기 위해 API 수준 8에 추가되었습니다.
wrap_content 이 요소의 콘텐츠에 맞도록 필요한 크기로만 크기를 설정합니다.

맞춤 뷰 요소

맞춤 ViewViewGroup 요소를 만들 수 있고 요소를 표준 레이아웃 요소와 동일하게 레이아웃에 적용할 수 있습니다. 또한, XML 요소에서 지원되는 속성을 지정할 수도 있습니다. 자세한 내용은 맞춤 뷰 구성요소 만들기를 참고하세요.

예:
res/layout/main_activity.xml에 저장된 XML 파일:
<?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:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

다음 애플리케이션 코드는 onCreate() 메서드에서 Activity의 레이아웃을 로드합니다.

Kotlin

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}

Java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
참고 항목: