แนวคิดและการใช้งาน Jetpack Compose
Android Studio รองรับแอตทริบิวต์ XML ที่หลากหลายในเนมสเปซ tools ซึ่งช่วยให้ใช้ฟีเจอร์เวลาออกแบบได้ เช่น เลย์เอาต์ที่จะแสดงใน Fragment หรือลักษณะการทำงานเวลาคอมไพล์ เช่น โหมดการย่อขนาดที่จะใช้กับทรัพยากร XML เมื่อคุณสร้างแอป เครื่องมือสร้างจะนำแอตทริบิวต์เหล่านี้ออกเพื่อไม่ให้ส่งผลต่อขนาด APK หรือลักษณะการทำงานของรันไทม์
หากต้องการใช้แอตทริบิวต์เหล่านี้ ให้เพิ่มเนมสเปซ tools ลงในองค์ประกอบรูทของไฟล์ XML แต่ละไฟล์ที่คุณต้องการใช้แอตทริบิวต์ดังกล่าว ดังที่แสดงที่นี่
<RootTag xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >
แอตทริบิวต์การจัดการข้อผิดพลาด
แอตทริบิวต์ต่อไปนี้ช่วยระงับข้อความเตือนของ Lint
tools:targetApi
ใช้สำหรับ: องค์ประกอบใดก็ได้
ใช้โดย: Lint
แอตทริบิวต์นี้ทำงานเหมือนกับคำอธิบายประกอบ @TargetApi ในโค้ด Java ซึ่งช่วยให้คุณระบุระดับ API (เป็นจำนวนเต็มหรือชื่อเวอร์ชัน) ที่รองรับองค์ประกอบนี้ได้
ซึ่งจะบอกเครื่องมือว่าคุณเชื่อว่าองค์ประกอบนี้และองค์ประกอบย่อยใดๆ จะใช้ในระดับ API ที่ระบุหรือสูงกว่าเท่านั้น ซึ่งจะหยุดไม่ให้ Lint เตือนคุณหากองค์ประกอบหรือแอตทริบิวต์ขององค์ประกอบไม่พร้อมใช้งานในระดับ API ที่คุณระบุเป็น minSdkVersion
ตัวอย่างเช่น คุณอาจใช้แอตทริบิวต์นี้เนื่องจาก GridLayout พร้อมใช้งานในระดับ API 14 ขึ้นไปเท่านั้น แต่คุณทราบว่าเลย์เอาต์นี้ไม่ได้ใช้ในโค้ดสำหรับเวอร์ชันที่ต่ำกว่า
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="14" >
(อย่างไรก็ตาม โปรดทราบว่าเราขอแนะนำให้ใช้ GridLayout จากไลบรารีสนับสนุนแทน)
แอตทริบิวต์มุมมองเวลาออกแบบ
แอตทริบิวต์ต่อไปนี้กำหนดลักษณะเลย์เอาต์ที่มองเห็นได้เฉพาะในตัวอย่างเลย์เอาต์ของ Android Studio เท่านั้น
tools: จากเดิม android:
เหมาะสำหรับ: <View>
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
คุณสามารถแทรกข้อมูลตัวอย่างในตัวอย่างเลย์เอาต์ได้โดยใช้คำนำหน้า tools: แทน android: กับแอตทริบิวต์ <View> ใดก็ได้จากเฟรมเวิร์ก Android
ซึ่งจะมีประโยชน์เมื่อค่าของแอตทริบิวต์ไม่ได้รับการป้อนข้อมูลจนกว่าจะถึงรันไทม์ และคุณต้องการดูผลลัพธ์ในตัวอย่างเลย์เอาต์
ตัวอย่างเช่น หากตั้งค่าแอตทริบิวต์ android:text ไว้ที่รันไทม์ หรือคุณต้องการดูเลย์เอาต์ที่มีค่าแตกต่างจากค่าเริ่มต้น คุณสามารถเพิ่ม tools:text เพื่อระบุข้อความบางส่วนสำหรับตัวอย่างเลย์เอาต์เท่านั้น
tools:text
จะตั้งค่า "Google Voice" เป็นค่าสำหรับการแสดงตัวอย่างเลย์เอาต์คุณสามารถเพิ่มทั้งแอตทริบิวต์เนมสเปซ android: ซึ่งใช้ที่รันไทม์ และแอตทริบิวต์ tools: ที่ตรงกัน ซึ่งจะลบล้างแอตทริบิวต์รันไทม์ในตัวอย่างเลย์เอาต์เท่านั้น
นอกจากนี้ คุณยังใช้แอตทริบิวต์ tools: เพื่อเลิกทำการตั้งค่าแอตทริบิวต์สำหรับตัวอย่างเลย์เอาต์เท่านั้นได้ด้วย เช่น หากคุณมี FrameLayout ที่มีองค์ประกอบย่อย 2 รายการ แต่ต้องการดูองค์ประกอบย่อยเพียงรายการเดียวในตัวอย่างเลย์เอาต์ คุณสามารถตั้งค่าองค์ประกอบย่อยรายการใดรายการหนึ่งให้มองไม่เห็นในตัวอย่างเลย์เอาต์ได้ ดังที่แสดงที่นี่
<Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="First" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Second" tools:visibility="invisible" />
เมื่อใช้เครื่องมือแก้ไขเลย์เอาต์ในมุมมองการออกแบบ หน้าต่างคุณสมบัติจะช่วยให้คุณแก้ไขแอตทริบิวต์มุมมองเวลาออกแบบได้ แอตทริบิวต์เวลาออกแบบแต่ละรายการจะแสดงด้วยไอคอนประแจ
ข้างชื่อแอตทริบิวต์เพื่อแยกความแตกต่างจากแอตทริบิวต์จริงที่มีชื่อเดียวกัน
tools:context
เหมาะสำหรับ: ราก <View> ทุกประเภท
ใช้โดย: Lint, เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
แอตทริบิวต์นี้ประกาศว่าเลย์เอาต์นี้เชื่อมโยงกับกิจกรรมใดโดยค่าเริ่มต้น ซึ่งจะเปิดใช้ฟีเจอร์ในเครื่องมือแก้ไขหรือตัวอย่างเลย์เอาต์ที่ต้องใช้ความรู้เกี่ยวกับกิจกรรม เช่น ธีมเลย์เอาต์ในตัวอย่าง และตำแหน่งที่จะแทรกแฮนเดิล onClick ที่สร้างจากการแก้ไขด่วน ดังที่แสดงในรูปที่ 2
onClick จะทำงานก็ต่อเมื่อคุณตั้งค่า tools:context ไว้เท่านั้นคุณระบุชื่อคลาสกิจกรรมได้โดยใช้คำนำหน้าจุดเดียวกันกับในไฟล์ Manifest (ไม่รวมชื่อแพ็กเกจแบบเต็ม)
เช่น
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
tools:itemCount
เหมาะสำหรับ: <RecyclerView>
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
สำหรับ RecyclerView ที่ระบุ แอตทริบิวต์นี้จะระบุจำนวนรายการที่ Layout Editor ควรแสดงผลในหน้าต่างแสดงตัวอย่าง
เช่น
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:itemCount="3"/>
tools:layout
เหมาะสำหรับ: <fragment>
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
แอตทริบิวต์นี้จะประกาศเลย์เอาต์ที่คุณต้องการให้ตัวอย่างเลย์เอาต์วาดภายในส่วนย่อย เนื่องจากตัวอย่างเลย์เอาต์ไม่สามารถเรียกใช้โค้ดกิจกรรมที่ปกติจะใช้เลย์เอาต์ได้
เช่น
<fragment android:name="com.example.main.ItemListFragment"
tools:layout="@layout/list_content" />
tools:listitem, tools:listheader, tools:listfooter
มีไว้สำหรับ: <AdapterView> (และคลาสย่อย เช่น <ListView>)
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
แอตทริบิวต์เหล่านี้ระบุเลย์เอาต์ที่จะแสดงในตัวอย่างเลย์เอาต์สำหรับรายการ ส่วนหัว และส่วนท้ายของรายการ ฟิลด์ข้อมูลในเลย์เอาต์จะป้อนด้วยเนื้อหาที่เป็นตัวเลข เช่น "รายการที่ 1" เพื่อไม่ให้รายการซ้ำกัน
เช่น
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/sample_list_item"
tools:listheader="@layout/sample_list_header"
tools:listfooter="@layout/sample_list_footer" />
tools:showIn
มีไว้สำหรับ: รูท <View> ใดก็ตามในเลย์เอาต์ที่ <include> อ้างอิงถึง
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
แอตทริบิวต์นี้ช่วยให้คุณชี้ไปยังเลย์เอาต์ที่ใช้เลย์เอาต์นี้โดยใช้ <include> เพื่อให้คุณดูตัวอย่างและแก้ไขไฟล์นี้ตามที่ปรากฏขณะฝังอยู่ในเลย์เอาต์หลักได้
เช่น
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:showIn="@layout/activity_main" />
ตอนนี้ตัวอย่างเลย์เอาต์จะแสดงเลย์เอาต์ TextView นี้ตามที่ปรากฏในเลย์เอาต์ activity_main
tools:menu
เหมาะสำหรับ: ราก <View> ทุกประเภท
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
แอตทริบิวต์นี้ระบุเมนูที่ตัวอย่างเลย์เอาต์แสดงในแถบแอป ค่าคือรหัสเมนูอย่างน้อย 1 รายการ โดยคั่นด้วยคอมมา ไม่มี @menu/ หรือคำนำหน้ารหัสใดๆ และไม่มีนามสกุล .xml
เช่น
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:menu="menu1,menu2" />
tools:minValue, tools:maxValue
เหมาะสำหรับ: <NumberPicker>
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
แอตทริบิวต์เหล่านี้จะตั้งค่าต่ำสุดและสูงสุดสำหรับมุมมอง NumberPicker
เช่น
<NumberPicker xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/numberPicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:minValue="0"
tools:maxValue="10" />
tools:openDrawer
เหมาะสำหรับ: <DrawerLayout>
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
แอตทริบิวต์นี้ช่วยให้คุณเปิด DrawerLayout ในตัวอย่างได้
นอกจากนี้ คุณยังแก้ไขวิธีที่ Layout Editor แสดงผลเลย์เอาต์ได้โดยส่งค่าใดค่าหนึ่งต่อไปนี้
ตารางที่ 1 ค่าเพื่อแก้ไขวิธีที่ Layout Editor แสดงผล DrawerLayout
| ค่าคงที่ | ค่า | คำอธิบาย |
|---|---|---|
end | 800005 | ดันออบเจ็กต์ไปที่ส่วนท้ายของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด |
left | 3 | ดันวัตถุไปทางซ้ายของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด |
right | 5 | ดันออบเจ็กต์ไปทางขวาของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด |
start | 800003 | ดันออบเจ็กต์ไปที่จุดเริ่มต้นของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด |
เช่น
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start" />
ทรัพยากร "@tools:sample/*" รายการ
มีไว้สำหรับ: มุมมองที่รองรับข้อความหรือรูปภาพ UI
ใช้โดย: เครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
แอตทริบิวต์นี้ช่วยให้คุณแทรกข้อมูลหรือรูปภาพตัวยึดตำแหน่งลงในมุมมองได้ ตัวอย่างเช่น หากต้องการทดสอบลักษณะการทำงานของเลย์เอาต์กับข้อความก่อนที่จะสรุปข้อความ UI สำหรับแอป คุณสามารถใช้ข้อความตัวยึดตำแหน่งได้ดังนี้
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="@tools:sample/lorem" />
ตารางต่อไปนี้อธิบายประเภทของข้อมูลตัวยึดตำแหน่งที่คุณสามารถแทรกลงในเลย์เอาต์ได้
ตารางที่ 2 ข้อมูลตัวยึดตำแหน่งสำหรับเลย์เอาต์
| ค่าแอตทริบิวต์ | คำอธิบายข้อมูลตัวยึดตำแหน่ง |
|---|---|
@tools:sample/full_names |
ชื่อและนามสกุลที่สร้างขึ้นแบบสุ่มจากการรวม @tools:sample/first_names และ @tools:sample/last_names |
@tools:sample/first_names |
ชื่อจริงที่พบบ่อย |
@tools:sample/last_names |
นามสกุลที่พบบ่อย |
@tools:sample/cities |
ชื่อเมืองจากทั่วโลก |
@tools:sample/us_zipcodes |
รหัสไปรษณีย์ของสหรัฐอเมริกาที่สร้างขึ้นแบบสุ่ม |
@tools:sample/us_phones |
หมายเลขโทรศัพท์ที่สร้างขึ้นแบบสุ่มในรูปแบบต่อไปนี้
(800) 555-xxxx |
@tools:sample/lorem |
ข้อความตัวยึดตำแหน่งในภาษาละติน |
@tools:sample/date/day_of_week |
วันที่และเวลาแบบสุ่มสำหรับรูปแบบที่ระบุ |
@tools:sample/date/ddmmyy | |
@tools:sample/date/mmddyy | |
@tools:sample/date/hhmm | |
@tools:sample/date/hhmmss | |
@tools:sample/avatars |
Vector Drawable ที่คุณใช้เป็นรูปโปรไฟล์ได้ |
@tools:sample/backgrounds/scenic |
รูปภาพที่คุณใช้เป็นพื้นหลังได้ |