레이아웃 내부에 레이아웃을 포함하는 방법은 무엇입니까?


답변:


198

편집 : 여기에 더 많은 정보를 요청한 의견에서와 같이. include태그 사용

<include
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   layout="@layout/yourlayout" />

재사용하려는 레이아웃을 포함합니다.

이 링크를 확인하십시오 ...


11
아주 작은 세부 사항 : android : layout_width = "fill_parent"대신 android : layout_width = "match_parent"를 사용하십시오. fill_parent는 더 이상 사용되지 않습니다.
Trinity

1
레이아웃을 포함하고 xml을 통해 일부 속성을 설정할 수 있습니까? 예를 들어 <include> 태그에서 직접 서브 레이아웃의 텍스트 문자열을 설정할 수 있습니까?
JohnyTex

@JohnyTex <include />태그 에서 직접 할 수 있는지 확실하지 않지만 자바 코드를 사용하여 할 수 있습니다. 포함 된 레이아웃에 대한 참조를 얻는 방법을 알아 보려면 아래 Phileo99의 답변을 참조하십시오 . 콘텐츠를 변경할 수 있습니다.
모세

58

당신이 포함 할 경우주의 android:id...<include />태그가 포함 된 레이아웃 내부에 정의 된 어떤 ID를 우선합니다. 예를 들면 :

<include
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/some_id_if_needed"
   layout="@layout/yourlayout" />

yourlayout.xml :

<LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/some_other_id">
   <Button
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:id="@+id/button1" />
 </LinearLayout>

그런 다음 코드에서이 포함 된 레이아웃을 다음과 같이 참조합니다.

View includedLayout = findViewById(R.id.some_id_if_needed);
Button insideTheIncludedLayout = (Button)includedLayout.findViewById(R.id.button1);


6

이 시도

<include
            android:id="@+id/OnlineOffline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            layout="@layout/YourLayoutName" />

3

레이아웃 재사용 에 대한 공식 문서에서

Android는 작고 재사용 가능한 대화 형 요소를 제공하기 위해 다양한 위젯을 제공하지만 특수 레이아웃이 필요한 더 큰 구성 요소를 재사용해야 할 수도 있습니다. 전체 레이아웃을 효율적으로 재사용하려면 태그를 사용하여 현재 레이아웃 안에 다른 레이아웃을 포함 할 수 있습니다.

다음은 include 태그를 사용하여 재사용 할 수있는 header.xml 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    >


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:text="@string/app_name"
        android:textColor="#000000" />

</RelativeLayout>

아니 나는 사용 다른 XML 파일에서 다른 레이아웃을 추가하려면 XML의 태그를 사용하십시오.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#f0f0f0" >


    <include
        android:id="@+id/header_VIEW"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/header" />

        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="#ffffff"
        android:orientation="vertical"
        android:padding="5dp" >


    </LinearLayout>

TextView를 루트 뷰가 아닌 RelativeLayout에 넣는 이유는 무엇입니까?
Florian Walther

@FlorianWalther이 예이다
인 IntelliJ Amiya

빠른 응답 감사합니다. 그러나 TextView를 루트 요소로 넣을 수 있습니까? 아니면 뭔가 빠졌습니까? ProgressBar를 재사용하고 레이아웃에 넣어야하는지 궁금하기 때문입니다.
Florian Walther

@FlorianWalther Because I want to reuse a ProgressBar무슨 문제가 오는거야?
IntelliJ Amiya

문제 없어 작동합니다. 그러나 내가 온라인에서 보는 모든 예제는 단일 위젯을 다른 레이아웃에 넣었고 왜 그런지 궁금합니다.
Florian Walther

0

이 링크를 사용하여 자세히 알아보기 https://developer.android.com/training/improving-layouts/reusing-layouts.html

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Game_logic">
    
          
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:id="@+id/text1"
                    android:textStyle="bold"
                    tools:text="Player " />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:layout_marginLeft="20dp"
    
                    android:id="@+id/text2"
                    tools:text="Player 2" />
          
            
          
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>

인용구

  • 위의 레이아웃을 사용하여 다른 활동에서 사용할 수 있습니다.

     <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      xmlns:app="http://schemas.android.com/apk/res-auto"
                      xmlns:tools="http://schemas.android.com/tools"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      tools:context=".SinglePlayer">   
    
              <include layout="@layout/activity_game_logic"/> 
          </androidx.constraintlayout.widget.ConstraintLayout>
    
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.