ทรัพยากรของเลย์เอาต์

ทรัพยากรเลย์เอาต์จะกำหนดสถาปัตยกรรมสำหรับ UI ใน Activity หรือ ของ UI

ตำแหน่งที่ตั้งไฟล์:

res/layout/filename.xml
ชื่อไฟล์จะใช้เป็นรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้ทรัพยากรไปยังทรัพยากร 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> ก็ได้ แต่จะมีได้เฉพาะองค์ประกอบ องค์ประกอบรูท 1 รายการและต้องมีแอตทริบิวต์ xmlns:android ที่มี android ตามที่แสดงในตัวอย่างไวยากรณ์ก่อนหน้านี้

องค์ประกอบ:
<ViewGroup>
คอนเทนเนอร์สำหรับองค์ประกอบ View อื่นๆ เรามี ออบเจ็กต์ ViewGroup ประเภทต่างๆ และแต่ละประเภทช่วยให้คุณ ระบุเลย์เอาต์ขององค์ประกอบย่อยในลักษณะต่างๆ ประเภทต่างๆ ViewGroup ออบเจ็กต์ประกอบด้วย LinearLayout RelativeLayout และ FrameLayout

อย่าคาดเดาเองว่าอนุมานใดๆ ของ ViewGroup ยอมรับมุมมองที่ซ้อนกัน กลุ่มมุมมองบางกลุ่ม เป็นการติดตั้งใช้งานคลาส AdapterView ซึ่งเป็นตัวกำหนด ของบุตรหลานที่มาจาก Adapter เท่านั้น

แอตทริบิวต์:

android: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 ตัวอย่างเช่น XML ของ LinearLayout แอตทริบิวต์

<View>
คอมโพเนนต์ UI แต่ละรายการที่โดยทั่วไปจะเรียกว่าวิดเจ็ต แตกต่าง ออบเจ็กต์ View ชนิด ได้แก่ TextView Button และ CheckBox

แอตทริบิวต์:

android: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 อ่านข้อมูลเพิ่มเติมได้ที่เลย์เอาต์ สำหรับ การอ้างอิงแอตทริบิวต์ที่มีอยู่ทั้งหมด โปรดดูเอกสารอ้างอิงที่เกี่ยวข้อง เช่น แอตทริบิวต์ XML TextView

<requestFocus>
องค์ประกอบใดก็ตามที่แสดงถึงออบเจ็กต์ View สามารถรวมองค์ประกอบที่ว่างเปล่านี้ได้ ซึ่งทำให้ผู้ปกครองโฟกัสที่หน้าจอตั้งแต่แรก คุณสามารถมีเพียงอย่างใดอย่างหนึ่งเท่านั้น องค์ประกอบต่อไฟล์
<include>
รวมไฟล์เลย์เอาต์ในเลย์เอาต์นี้

แอตทริบิวต์:

layout
แหล่งข้อมูลของเลย์เอาต์ ต้องระบุ การอ้างอิงเลย์เอาต์ ทรัพยากร
android:id
รหัสทรัพยากร ลบล้างรหัสที่กำหนดให้กับมุมมองรูทในเลย์เอาต์ที่รวมอยู่
android:layout_height
มิติข้อมูลหรือคีย์เวิร์ด ลบล้างความสูงที่กำหนดให้มุมมองรากใน ที่รวมอยู่ มีผลก็ต่อเมื่อประกาศ android:layout_width ด้วยเท่านั้น
android:layout_width
มิติข้อมูลหรือคีย์เวิร์ด ลบล้างความกว้างที่ให้กับมุมมองรากใน ที่รวมอยู่ มีผลก็ต่อเมื่อประกาศ android:layout_height ด้วยเท่านั้น

คุณจะรวมแอตทริบิวต์เลย์เอาต์อื่นๆ ใน <include> ที่มีลักษณะดังนี้ได้ ที่สนับสนุนโดยองค์ประกอบรูทในเลย์เอาต์ที่รวมอยู่ และจะลบล้างที่กำหนดไว้ใน องค์ประกอบราก

ข้อควรระวัง: หากต้องการลบล้างแอตทริบิวต์เลย์เอาต์โดยใช้ <include> คุณจะต้องลบล้างทั้ง 2 แท็ก android:layout_height และ android:layout_width เพื่อให้ แอตทริบิวต์การออกแบบอื่นๆ เพื่อให้มีผล

อีกวิธีหนึ่งในการรวมเลย์เอาต์คือการใช้ ViewStub: เลย์เอาต์ที่เรียบง่าย ที่ไม่กินพื้นที่ของเลย์เอาต์จนกว่าคุณจะขยายมุมมองให้ชัดเจน ในสไลด์จะมีองค์ประกอบ ไฟล์เลย์เอาต์ที่กำหนดโดยแอตทริบิวต์ android:layout สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ ViewStub โปรดอ่านโหลด ครั้งตามคำขอ

<merge>
องค์ประกอบรูทสำรองที่ไม่ได้วาดในลำดับชั้นของเลย์เอาต์ การใช้เป็น องค์ประกอบรูทจะมีประโยชน์เมื่อคุณทราบว่าเลย์เอาต์นี้อยู่ในเลย์เอาต์ ที่มี View ระดับบนที่เหมาะสมอยู่แล้วที่มีรายการย่อยของ องค์ประกอบ <merge>

ซึ่งจะเป็นประโยชน์อย่างยิ่งเมื่อคุณวางแผนที่จะรวมเลย์เอาต์นี้ ในไฟล์เลย์เอาต์อื่นโดยใช้ <include> และ เลย์เอาต์นี้ไม่ต้องใช้คอนเทนเนอร์ ViewGroup อื่น สำหรับข้อมูลเพิ่มเติม ข้อมูลเกี่ยวกับการผสานรวมเลย์เอาต์ โปรดอ่านใช้เลย์เอาต์ซ้ำด้วย <include>

ค่าสำหรับ android:id

สำหรับค่ารหัส โดยทั่วไปแล้วคุณจะใช้รูปแบบไวยากรณ์นี้: "@+id/name" ดังที่แสดงในตัวอย่างต่อไปนี้ เครื่องหมายบวก + บ่งบอกว่าเป็นรหัสทรัพยากรใหม่ และเครื่องมือ aapt จะสร้าง จำนวนเต็มใหม่ของทรัพยากรในคลาส R.java ถ้ายังไม่มี

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

ตอนนี้ชื่อ nameTextbox เป็นรหัสทรัพยากรที่แนบอยู่กับองค์ประกอบนี้แล้ว จากนั้นคุณจะสามารถ อ้างอิงถึง TextView ที่เชื่อมโยงกับ ID ดังกล่าวใน Java:

Kotlin

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

Java

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

โค้ดนี้จะแสดงออบเจ็กต์ TextView

แต่ถ้าคุณได้กำหนดทรัพยากร ID ไว้แล้ว และไม่ได้ อยู่แล้ว คุณสามารถนำรหัสนั้นไปใช้กับเอลิเมนต์ View ได้โดยยกเว้น เครื่องหมายบวกในค่า android:id

ค่าสำหรับ android:layout_height และ android:layout_width

ค่าความสูงและความกว้างจะแสดงโดยใช้ค่าใดๆ มิติข้อมูล หน่วยที่รองรับโดย Android (px, dp, sp, pt, in, mm) หรือคีย์เวิร์ดต่อไปนี้

ค่าคำอธิบาย
match_parent ตั้งค่ามิติข้อมูลให้ตรงกับองค์ประกอบหลัก เพิ่มใน API ระดับ 8 ไปยัง เลิกใช้งาน fill_parent
wrap_content ตั้งค่าขนาดเป็นขนาดที่จําเป็นเพื่อให้พอดีกับเนื้อหาขององค์ประกอบนี้เท่านั้น

องค์ประกอบของมุมมองที่กำหนดเอง

คุณสามารถสร้างViewและViewGroupที่กำหนดเองได้ องค์ประกอบเหล่านี้และนำไปใช้กับเค้าโครงของคุณเช่นเดียวกับเค้าโครงมาตรฐาน คุณระบุแอตทริบิวต์ที่รองรับในองค์ประกอบ XML ได้ด้วย สำหรับข้อมูลเพิ่มเติม ดูสร้างคอมโพเนนต์มุมมองที่กำหนดเอง

ตัวอย่าง:
ไฟล์ XML ที่บันทึกไว้ที่ res/layout/main_activity.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>

โค้ดแอปพลิเคชันนี้จะโหลดเลย์เอาต์สำหรับ Activity ใน เมธอด onCreate():

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);
}
ดูเพิ่มเติม