ทรัพยากรเลย์เอาต์จะกำหนดสถาปัตยกรรมสำหรับ 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);
}
- ดูเพิ่มเติม
-