레이아웃 리소스

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

파일 위치:
res/layout/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
View(또는 서브클래스) 리소스를 가리키는 리소스 포인터입니다.
리소스 참조:
자바: 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의 모든 파생 객체가 중첩된 View를 허용한다고 가정해서는 안 됩니다. 일부 ViewGroupAdapterView 클래스를 구현한 것이며 이 클래스는 Adapter에서만 하위 요소를 결정합니다.

속성:

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

더 많은 속성이 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_width
크기 또는 키워드. 필수사항. 크기 값(또는 크기 리소스) 또는 키워드("match_parent" 또는 "wrap_content")로 요소의 너비입니다. 아래 유효한 값을 참조하세요.

더 많은 속성이 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은 가벼운 View로서, 명시적으로 펼칠 때까지 레이아웃 공간을 소비하지 않으며 이 시점에 android:layout 속성에 의해 정의된 레이아웃 파일을 포함합니다. ViewStub을 사용하는 방법에 관한 자세한 내용은 주문형 뷰 로드를 참조합니다.

<merge>
레이아웃 계층 구조에 그려지지 않은 대체 루트 요소입니다. 루트 요소로 이 요소를 사용하면 이 레이아웃이 이미 적절한 상위 뷰를 포함하여 <merge> 요소의 하위 요소를 포함하는 레이아웃에 배치되는 경우에 유용합니다. <include>를 사용하여 이 레이아웃을 다른 레이아웃 파일에 포함하고 이 레이아웃이 다른 ViewGroup 컨테이너가 필요하지 않을 때에 특히 유용합니다. 레이아웃 병합에 관한 자세한 내용은 <include/>로 레이아웃 재사용을 참조하세요.

android:id

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

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

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

Kotlin

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

자바

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

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

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

android:layout_heightandroid: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)
    }
    

자바

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