วิธีการรวมเลย์เอาต์ภายในเลย์เอาต์?


96

จะรวมเค้าโครงภายในเลย์เอาต์ใน Android ได้อย่างไร

ฉันกำลังสร้างเค้าโครงทั่วไป ฉันต้องการรวมเค้าโครงนั้นในหน้าอื่น


มีตัวอย่างการใช้งานง่ายๆ [ในโพสต์นี้] [1] [1]: stackoverflow.com/questions/2732682/…
Asaf Pinhassi

คำตอบ:


198

แก้ไข:ตามความคิดเห็นที่ขอข้อมูลเพิ่มเติมที่นี่ ใช้includeแท็ก

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

เพื่อรวมเค้าโครงที่คุณต้องการใช้ซ้ำ

ตรวจสอบลิงค์นี้ ...


11
เป็นเพียงรายละเอียดเล็ก ๆ น้อย ๆ : ใช้ android: layout_width = "match_parent" แทน android: layout_width = "fill_parent" Fill_parent เลิกใช้งานแล้ว
Trinity

1
ฉันสามารถรวมเค้าโครงและตั้งค่าคุณสมบัติบางอย่างผ่าน xml เช่นตั้งค่าสตริงข้อความในโครงร่างย่อยโดยตรงในแท็ก <include> ได้หรือไม่
JohnyTex

@JohnyTex ไม่แน่ใจว่าคุณสามารถทำได้โดยตรงใน<include />แท็กอย่างไรก็ตามคุณสามารถทำได้โดยใช้รหัสจาวา ดูคำตอบของ Phileo99 ด้านล่างเพื่อทราบวิธีการอ้างอิงถึงเค้าโครงที่รวมไว้ จากนั้นคุณสามารถแก้ไขเนื้อหาได้
โมเสส

58

โปรดทราบว่าหากคุณรวมandroid:id...ไว้ใน<include />แท็กแท็กจะลบล้างรหัสที่กำหนดไว้ภายในโครงร่างที่รวมไว้ ตัวอย่างเช่น:

<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 จะนำเสนอวิดเจ็ตที่หลากหลายเพื่อให้มีองค์ประกอบเชิงโต้ตอบขนาดเล็กและใช้ซ้ำได้ แต่คุณอาจต้องใช้ส่วนประกอบขนาดใหญ่อีกครั้งซึ่งต้องใช้รูปแบบพิเศษ ในการใช้เค้าโครงที่สมบูรณ์ซ้ำได้อย่างมีประสิทธิภาพคุณสามารถใช้แท็กเพื่อฝังเค้าโครงอื่นภายในเค้าโครงปัจจุบัน

นี่คือไฟล์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>

Blockquote

  • เค้าโครงด้านบนคุณสามารถใช้ในกิจกรรมอื่น ๆ โดยใช้

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