Bagaimana cara memasukkan tata letak di dalam tata letak?

96

Bagaimana cara memasukkan tata letak di dalam tata letak di Android?

Saya membuat tata letak umum. Saya ingin memasukkan tata letak itu di halaman lain.

mohan
sumber
Ada contoh penggunaan sederhana [dalam posting ini] [1] [1]: stackoverflow.com/questions/2732682/…
Asaf Pinhassi

Jawaban:

198

Edit: Seperti dalam komentar yang diminta di sini, beberapa informasi lebih lanjut. Gunakan includetag

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

untuk menyertakan tata letak yang ingin Anda gunakan kembali.

Lihat tautan ini ...

Michael Rose
sumber
11
hanya detail kecil: gunakan android: layout_width = "match_parent" alih-alih android: layout_width = "fill_parent". fill_parent tidak digunakan lagi.
Trinity
1
Dapatkah saya menyertakan tata letak dan menyetel beberapa propertinya melalui xml, misalnya menyetel string teks di sub-tata letak secara langsung di tag <include>?
JohnyTex
@JohnyTex Tidak yakin apakah Anda dapat melakukannya secara langsung di <include />tag, namun Anda dapat melakukannya dengan menggunakan kode java. lihat jawaban Phileo99 di bawah ini untuk mengetahui bagaimana mendapatkan referensi ke layout yang disertakan. dan kemudian Anda dapat mengubah isinya.
Musa
58

Perhatikan bahwa jika Anda menyertakannya android:id...ke dalam <include />tag, itu akan menimpa id apa pun yang didefinisikan di dalam tata letak yang disertakan. Sebagai contoh:

<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>

Maka Anda akan mereferensikan tata letak yang disertakan ini dalam kode sebagai berikut:

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

Coba ini

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

Dari dokumen Resmi tentang Menggunakan Kembali Tata Letak

Meskipun Android menawarkan berbagai widget untuk menyediakan elemen interaktif yang kecil dan dapat digunakan kembali, Anda mungkin juga perlu menggunakan kembali komponen yang lebih besar yang memerlukan tata letak khusus. Untuk menggunakan kembali tata letak lengkap secara efisien, Anda dapat menggunakan tag untuk menyematkan tata letak lain di dalam tata letak saat ini.

Ini adalah file header.xml saya yang dapat saya gunakan kembali menggunakan tag include

<?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>

Tidak, saya menggunakan tag dalam XML untuk menambahkan tata letak lain dari file XML lain.

<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>
IntelliJ Amiya
sumber
Mengapa meletakkan TextView di RelativeLayout dan bukan sebagai tampilan root?
Florian Walther
@FlorianWalther Ini adalah sebuah contoh
IntelliJ Amiya
Terima kasih atas tanggapan yang cepat. Tapi apakah saya benar bahwa saya bisa meletakkan TextView sebagai elemen root atau saya kehilangan sesuatu? Karena saya ingin menggunakan kembali ProgressBar dan bertanya-tanya apakah saya harus memasukkannya ke dalam tata letak.
Florian Walther
@FlorianWalther Because I want to reuse a ProgressBarmasalah apa yang akan datang?
IntelliJ Amiya
Tidak ada masalah, itu berhasil. Tetapi semua contoh yang saya lihat secara online menempatkan satu widget ke tata letak lain dan saya bertanya-tanya mengapa.
Florian Walther
0

Pelajari Lebih Lanjut Menggunakan tautan ini 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>

Blockquote

  • Tata letak di atas Anda dapat digunakan dalam aktivitas lain menggunakan

     <?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>
    
Ajay Patel
sumber