- ไวยากรณ์:
<activity android:allowEmbedded=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:autoRemoveFromRecents=["true" | "false"] android:banner="drawable resource" android:canDisplayOnRemoteDevices=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:colorMode=[ "hdr" | "wideColorGamut"] android:configChanges=["colorMode", "density", "fontScale", "fontWeightAdjustment", "grammaticalGender", "keyboard", "keyboardHidden", "layoutDirection", "locale", "mcc", "mnc", "navigation", "orientation", "screenLayout", "screenSize", "smallestScreenSize", "touchscreen", "uiMode"] android:directBootAware=["true" | "false"] android:documentLaunchMode=["intoExisting" | "always" | "none" | "never"] android:enabled=["true" | "false"] android:enabledOnBackInvokedCallback=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:immersive=["true" | "false"] android:label="string resource" android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance" | "singleInstancePerTask"] android:lockTaskMode=["normal" | "never" | "if_whitelisted" | "always"] android:maxRecents="integer" android:maxAspectRatio="float" android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:parentActivityName="string" android:persistableMode=["persistRootOnly" | "persistAcrossReboots" | "persistNever"] android:permission="string" android:process="string" android:relinquishTaskIdentity=["true" | "false"] android:requireContentUriPermissionFromCaller=["none" | "read" | "readAndWrite" | "readOrWrite" | "write"] android:resizeableActivity=["true" | "false"] android:screenOrientation=["unspecified" | "behind" | "landscape" | "portrait" | "reverseLandscape" | "reversePortrait" | "sensorLandscape" | "sensorPortrait" | "userLandscape" | "userPortrait" | "sensor" | "fullSensor" | "nosensor" | "user" | "fullUser" | "locked"] android:showForAllUsers=["true" | "false"] android:stateNotNeeded=["true" | "false"] android:supportsPictureInPicture=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] > ... </activity>
- อยู่ใน
<application>
- อาจมีข้อมูลต่อไปนี้
<intent-filter>
<meta-data>
<layout>
- description:
- ประกาศกิจกรรม (คลาสย่อย
Activity
) ที่ใช้งานอินเทอร์เฟซผู้ใช้แบบภาพบางส่วนของแอปพลิเคชัน กิจกรรมทั้งหมดต้องแสดงโดยองค์ประกอบ<activity>
ในไฟล์ Manifest ระบบจะไม่เห็นและจะไม่เรียกใช้รายการที่ไม่ได้ประกาศไว้ - แอตทริบิวต์:
android:allowEmbedded
-
บ่งบอกว่าสามารถเปิดใช้งานกิจกรรมเป็นกิจกรรมย่อยที่ฝังอยู่ในกิจกรรมอื่นได้ โดยเฉพาะอย่างยิ่งในกรณีที่กิจกรรมย่อยอยู่ในคอนเทนเนอร์ เช่น
Display
ที่กิจกรรมอื่นเป็นเจ้าของ ตัวอย่างเช่น กิจกรรมที่ใช้สำหรับการแจ้งเตือนที่กําหนดเองของ Wear จะประกาศข้อมูลนี้เพื่อให้ Wear แสดงกิจกรรมในสตรีมบริบท ซึ่งอยู่ในกระบวนการอื่นค่าเริ่มต้นของแอตทริบิวต์นี้คือ
false
android:allowTaskReparenting
- ระบุว่ากิจกรรมจะย้ายจากงานที่เริ่มต้นไปยังงานที่เชื่อมโยงกันเมื่อนำงานนั้นมาแสดงต่อหน้าผู้ใช้ในครั้งถัดไปได้หรือไม่ สถานะจะเป็น
"true"
หากย้ายได้ และ"false"
หากยังคงอยู่กับงานที่เริ่มต้นหากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ค่าที่ตั้งค่าโดยแอตทริบิวต์
allowTaskReparenting
ที่เกี่ยวข้องของเอลิเมนต์<application>
จะมีผลกับกิจกรรม ค่าเริ่มต้นคือ"false"
โดยปกติแล้ว เมื่อเริ่มกิจกรรม ระบบจะเชื่อมโยงกิจกรรมนั้นกับงานของกิจกรรมที่เริ่มต้น และกิจกรรมจะเชื่อมโยงกับงานตลอดอายุการใช้งาน คุณสามารถใช้แอตทริบิวต์นี้เพื่อบังคับให้จัดทําเป็นรายการหลักของงานที่มีความสัมพันธ์กันอีกครั้งเมื่องานปัจจุบันไม่แสดงอีกต่อไป โดยปกติแล้ว จะใช้เพื่อทําให้กิจกรรมของแอปพลิเคชันย้ายไปยังงานหลักที่เชื่อมโยงกับแอปพลิเคชันนั้น
ตัวอย่างเช่น หากข้อความอีเมลมีลิงก์ไปยังหน้าเว็บ การคลิกลิงก์จะแสดงกิจกรรมที่แสดงหน้าเว็บได้ กิจกรรมดังกล่าวจะกําหนดโดยแอปพลิเคชันเบราว์เซอร์ แต่เปิดขึ้นเป็นส่วนหนึ่งของงานอีเมล หากมีการกำหนดใหม่ให้อยู่ภายใต้งานของเบราว์เซอร์ งานดังกล่าวจะแสดงเมื่อเบราว์เซอร์ปรากฏขึ้นที่ด้านหน้าครั้งถัดไป และจะไม่แสดงเมื่องานอีเมลปรากฏขึ้นอีกครั้ง
แอตทริบิวต์
taskAffinity
จะกําหนดความเกี่ยวข้องของกิจกรรม ระบบจะกำหนดความเกี่ยวข้องของงานโดยอ่านความเกี่ยวข้องของกิจกรรมรูท ดังนั้น ตามคําจํากัดความแล้ว กิจกรรมรูทจะอยู่ในงานที่มีความเกี่ยวข้องเดียวกันเสมอ เนื่องจากกิจกรรมที่มีโหมดการเริ่ม"singleTask"
หรือ"singleInstance"
จะอยู่ที่รูทของงานได้เท่านั้น การรวมเป็นกลุ่มใหม่จึงจำกัดไว้ที่โหมด"standard"
และ"singleTop"
(ดูแอตทริบิวต์launchMode
ด้วย) android:alwaysRetainTaskState
- ระบบจะดูแลรักษาสถานะของงานที่กิจกรรมอยู่เสมอหรือไม่
"true"
หากเป็นเช่นนั้น และ"false"
หากระบบสามารถรีเซ็ตงานเป็นสถานะเริ่มต้นในบางสถานการณ์ ค่าเริ่มต้นคือ"false"
แอตทริบิวต์นี้จะมีความหมายสําหรับกิจกรรมรูทของงานเท่านั้น ระบบจะละเว้นกิจกรรมอื่นๆ ทั้งหมดโดยปกติแล้ว ระบบจะล้างงานโดยนํากิจกรรมทั้งหมดออกจากกองที่อยู่เหนือกิจกรรมรูทในบางสถานการณ์เมื่อผู้ใช้เลือกงานนั้นอีกครั้งจากหน้าจอหลัก โดยปกติแล้ว ระบบจะดำเนินการนี้หากผู้ใช้ไม่ได้เข้าชมงานเป็นระยะเวลาหนึ่ง เช่น 30 นาที
อย่างไรก็ตาม เมื่อแอตทริบิวต์นี้เป็น
"true"
ผู้ใช้จะกลับไปที่งานในสถานะล่าสุดเสมอ ไม่ว่าจะไปที่งานนั้นด้วยวิธีใดก็ตาม ซึ่งมีประโยชน์ในแอปพลิเคชันอย่างเว็บเบราว์เซอร์ที่มีสถานะจำนวนมาก เช่น แท็บที่เปิดอยู่หลายแท็บที่ผู้ใช้ไม่ต้องการสูญเสีย android:autoRemoveFromRecents
- ระบุว่างานซึ่งเปิดโดยกิจกรรมที่มีแอตทริบิวต์นี้จะยังคงอยู่ในหน้าจอล่าสุดจนกว่ากิจกรรมสุดท้ายในงานจะเสร็จสมบูรณ์หรือไม่ หากเป็น
true
ระบบจะนำงานออกจากหน้าจอล่าสุดโดยอัตโนมัติ ซึ่งจะลบล้างการใช้FLAG_ACTIVITY_RETAIN_IN_RECENTS
ของผู้โทร โดยต้องเป็นค่าบูลีน นั่นคือ"true"
หรือ"false"
android:banner
- ทรัพยากรที่วาดได้
ซึ่งแสดงแบนเนอร์กราฟิกแบบขยายสำหรับรายการที่เกี่ยวข้อง ใช้กับแท็ก
<activity>
เพื่อแสดงแบนเนอร์เริ่มต้นสําหรับกิจกรรมที่เฉพาะเจาะจง หรือใช้กับแท็ก<application>
เพื่อแสดงแบนเนอร์สําหรับกิจกรรมทั้งหมดของแอปพลิเคชันระบบจะใช้แบนเนอร์เพื่อแสดงแอปในหน้าจอหลักของ Android TV เนื่องจากแบนเนอร์จะแสดงในหน้าจอหลักเท่านั้น แอปพลิเคชันที่มีกิจกรรมที่จัดการ Intent
CATEGORY_LEANBACK_LAUNCHER
จึงระบุแบนเนอร์ได้เท่านั้นแอตทริบิวต์นี้ตั้งค่าเป็นการอ้างอิงถึงทรัพยากรที่วาดได้ซึ่งมีรูปภาพ เช่น
"@drawable/banner"
ไม่มีแบนเนอร์เริ่มต้นดูข้อมูลเพิ่มเติมได้ที่ ระบุแบนเนอร์หน้าจอหลักใน "เริ่มต้นใช้งานแอปทีวี"
android:canDisplayOnRemoteDevices
-
ระบุว่ากิจกรรมจะแสดงในอุปกรณ์ระยะไกลได้หรือไม่ ซึ่งอาจใช้ Android หรือไม่ก็ได้ โดยต้องเป็นค่าบูลีน
"true"
หรือ"false"
ค่าเริ่มต้นของแอตทริบิวต์นี้คือ
"true"
android:clearTaskOnLaunch
- ระบบจะนำกิจกรรมทั้งหมดออกจากงาน ยกเว้นกิจกรรมรูท หรือไม่เมื่อมีการเปิดงานอีกครั้งจากหน้าจอหลัก
"true"
หากระบบจะตัดงานให้เหลือเพียงกิจกรรมรูทเสมอ และ"false"
หากไม่ใช่ ค่าเริ่มต้นคือ"false"
แอตทริบิวต์นี้มีประโยชน์สําหรับกิจกรรมที่เริ่มงานใหม่เท่านั้น ซึ่งเป็นกิจกรรมรูท ระบบจะละเว้นสำหรับกิจกรรมอื่นๆ ทั้งหมดในแท็บเมื่อค่าเป็น
"true"
ทุกครั้งที่ผู้ใช้เริ่มงาน ระบบจะนำผู้ใช้ไปยังกิจกรรมรูทของงานนั้น ไม่ว่าผู้ใช้จะทําอะไรในครั้งล่าสุดของงานนั้นก็ตาม และไม่ว่าคุณจะใช้ปุ่ม "ย้อนกลับ" หรือ "หน้าแรก" เพื่อออกจากงานก็ตาม เมื่อค่าเป็น"false"
ระบบจะล้างกิจกรรมออกจากงานได้ในบางสถานการณ์ แต่ไม่ใช่เสมอไป ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์alwaysRetainTaskState
สมมติว่าผู้ใช้เปิดกิจกรรม P จากหน้าจอหลัก แล้วไปที่กิจกรรม Q ผู้ใช้แตะ "บ้าน" แล้วกลับไปที่กิจกรรม P โดยปกติแล้ว ผู้ใช้จะเห็นกิจกรรม ค เนื่องจากเป็นกิจกรรมที่ผู้ใช้ทำล่าสุดในภารกิจของ พ อย่างไรก็ตาม หาก P ตั้งค่า Flag นี้เป็น
"true"
ระบบจะนำกิจกรรมทั้งหมดที่อยู่ด้านบนออก (ในกรณีนี้คือ Q) เมื่อผู้ใช้เปิดกิจกรรม P จากหน้าจอหลัก ดังนั้น ผู้ใช้จะเห็นเฉพาะ P เมื่อกลับไปที่งานหากแอตทริบิวต์นี้และ
allowTaskReparenting
มีค่าเป็น"true"
กิจกรรมที่เปลี่ยนผู้ปกครองได้จะย้ายไปยังงานที่มีความเกี่ยวข้อง จากนั้นระบบจะทิ้งกิจกรรมที่เหลือระบบจะละเว้นแอตทริบิวต์นี้หากไม่ได้ตั้งค่า
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
android:colorMode
ระบุโหมดสีของกิจกรรม หากระบุ อาจเป็น
hdr
หรือwideColorGamut
หากเป็น
hdr
ระบบจะขอให้กิจกรรมแสดงในแบบช่วงไดนามิกสูงหากอุปกรณ์รองรับหาก
wideColorGamut
ขอให้กิจกรรมแสดงในโหมดสีกว้างในอุปกรณ์ที่เข้ากันได้ ในโหมดสีกว้าง หน้าต่างจะแสดงผลนอกช่วงสีSRGB
เพื่อแสดงสีสันที่สดใสยิ่งขึ้น หากอุปกรณ์ไม่รองรับการแสดงผลแบบช่วงสีกว้าง แอตทริบิวต์นี้จะไม่มีผล ดูข้อมูลเพิ่มเติมเกี่ยวกับการแสดงผลในโหมดสีกว้างได้ที่หัวข้อปรับปรุงกราฟิกด้วยเนื้อหาแบบสีกว้างandroid:configChanges
- แสดงรายการการเปลี่ยนแปลงการกําหนดค่าที่กิจกรรมจัดการเอง เมื่อการเปลี่ยนแปลงการกําหนดค่าเกิดขึ้นระหว่างรันไทม์ กิจกรรมจะปิดและเริ่มทํางานอีกครั้งโดยค่าเริ่มต้น แต่การประกาศการกําหนดค่าด้วยแอตทริบิวต์นี้จะป้องกันไม่ให้กิจกรรมเริ่มทํางานอีกครั้ง แต่กิจกรรมจะยังคงทํางานอยู่และระบบจะเรียกใช้เมธอด
onConfigurationChanged()
ของกิจกรรมหมายเหตุ: ใช้แอตทริบิวต์นี้เฉพาะในกรณีที่พิเศษเพื่อปรับปรุงประสิทธิภาพและการตอบสนองของแอปพลิเคชัน โปรดดูข้อมูลเพิ่มเติมที่หัวข้อจัดการการเปลี่ยนแปลงการกําหนดค่า
สตริงต่อไปนี้คือค่าที่ถูกต้องสำหรับแอตทริบิวต์นี้ ค่าหลายค่าจะแยกกันด้วย
|
เช่น"locale|navigation|orientation"
ค่า คำอธิบาย "colorMode"
ความสามารถในการแสดงโหมดสีของหน้าจอ (ช่วงสีหรือช่วงไดนามิก) มีการเปลี่ยนแปลง
หมายเหตุ: โหมดสีที่กิจกรรมขอด้วยแอตทริบิวต์
colorMode
หรือที่รันไทม์จะแตกต่างจากความสามารถสำหรับโหมดสีต่างๆ กิจกรรมที่เปลี่ยนโหมดสีที่ใช้อยู่จะไม่ทำให้เกิดการเปลี่ยนแปลงการกำหนดค่า เนื่องจากความสามารถของสีในการแสดงผลไม่เปลี่ยนแปลง"density"
การเปลี่ยนแปลงความหนาแน่นของการแสดงผล เช่น เมื่อผู้ใช้ระบุขนาดการแสดงผลที่ต่างกันหรือมีการแสดงผลอื่นที่ใช้งานอยู่
เพิ่มใน API ระดับ 24
"fontScale"
การเปลี่ยนแปลงตัวคูณการปรับขนาดแบบอักษร เช่น เมื่อผู้ใช้เลือกขนาดแบบอักษรใหม่สำหรับทั้งระบบ "fontWeightAdjustment"
น้ำหนักตัวอักษรที่เพิ่มขึ้นมีการเปลี่ยนแปลง "grammaticalGender"
เพศทางไวยากรณ์ของภาษามีการเปลี่ยนแปลง ดู GrammaticalInflectionManager
เพิ่มใน API ระดับ 34
"keyboard"
การเปลี่ยนแปลงประเภทแป้นพิมพ์ เช่น เมื่อผู้ใช้เสียบแป้นพิมพ์ภายนอก "keyboardHidden"
การเปลี่ยนแปลงการช่วยเหลือพิเศษของแป้นพิมพ์ เช่น เมื่อผู้ใช้แสดงแป้นพิมพ์ฮาร์ดแวร์ "layoutDirection"
การเปลี่ยนแปลงทิศทางของเลย์เอาต์ เช่น จากจากซ้ายไปขวา (LTR) เป็นจากขวาไปซ้าย (RTL)
เพิ่มใน API ระดับ 17
"locale"
การเปลี่ยนแปลงภาษา เช่น เมื่อผู้ใช้เลือกภาษาใหม่ที่จะแสดงข้อความ "mcc"
การเปลี่ยนแปลงรหัสประเทศ (MCC) ของเครือข่ายมือถือ IMSI เมื่อตรวจพบซิมที่อัปเดต MCC "mnc"
การเปลี่ยนแปลงรหัสเครือข่ายมือถือ IMSI (MNC) เมื่อตรวจพบซิมที่อัปเดต MNC "navigation"
TA เปลี่ยนเป็นประเภทการนําทาง (แทร็กบอลหรือ D-pad) ซึ่งปกติแล้วจะไม่เกิดขึ้น "orientation"
การเปลี่ยนแปลงการวางแนวหน้าจอ เช่น เมื่อผู้ใช้หมุนอุปกรณ์
หมายเหตุ: หากแอปพลิเคชันกำหนดเป้าหมายเป็น Android 3.2 (API ระดับ 13) ขึ้นไป ให้ประกาศการกำหนดค่า
"screenLayout"
และ"screenSize"
ด้วย เนื่องจากเลย์เอาต์หน้าจอและขนาดหน้าจออาจเปลี่ยนแปลงเมื่ออุปกรณ์สลับระหว่างการวางแนวตั้งและแนวนอน"screenLayout"
การเปลี่ยนแปลงเลย์เอาต์หน้าจอ เช่น เมื่อจอแสดงผลอื่นทำงานอยู่ "screenSize"
การเปลี่ยนแปลงขนาดหน้าจอที่ใช้ได้ในปัจจุบัน
ค่านี้แสดงถึงการเปลี่ยนแปลงขนาดที่ใช้ได้ในปัจจุบันโดยสัมพันธ์กับสัดส่วนภาพปัจจุบัน ดังนั้นค่านี้จะเปลี่ยนแปลงเมื่อผู้ใช้สลับระหว่างแนวนอนกับแนวตั้ง
เพิ่มใน API ระดับ 13
"smallestScreenSize"
การเปลี่ยนแปลงขนาดหน้าจอจริง
ค่านี้แสดงถึงการเปลี่ยนแปลงขนาดโดยไม่คำนึงถึงการวางแนว ดังนั้นค่านี้จะเปลี่ยนแปลงก็ต่อเมื่อขนาดหน้าจอจริงเปลี่ยนแปลง เช่น การเปลี่ยนไปใช้จอแสดงผลภายนอก การเปลี่ยนแปลงการกำหนดค่านี้สอดคล้องกับการเปลี่ยนแปลงในการกำหนดค่า
smallestWidth
เพิ่มใน API ระดับ 13
"touchscreen"
การเปลี่ยนแปลงหน้าจอสัมผัส ซึ่งปกติแล้วจะไม่เกิดขึ้น "uiMode"
การเปลี่ยนแปลงโหมดอินเทอร์เฟซผู้ใช้ เช่น เมื่อผู้ใช้วางอุปกรณ์ในแท่นชาร์จบนโต๊ะหรือในรถยนต์ หรือโหมดกลางคืนมีการเปลี่ยนแปลง ดูข้อมูลเพิ่มเติมเกี่ยวกับโหมด UI ต่างๆ ได้ที่ UiModeManager
เพิ่มใน API ระดับ 8
การเปลี่ยนแปลงการกําหนดค่าทั้งหมดเหล่านี้อาจส่งผลต่อค่าทรัพยากรที่แอปพลิเคชันเห็น ดังนั้น เมื่อเรียกใช้
onConfigurationChanged()
มักจะจำเป็นต้องดึงข้อมูลทรัพยากรทั้งหมดอีกครั้ง ซึ่งรวมถึงเลย์เอาต์ของมุมมองและไฟล์ DRAWABLE เพื่อจัดการการเปลี่ยนแปลงอย่างถูกต้องหมายเหตุ: หากต้องการจัดการการเปลี่ยนแปลงการกําหนดค่าที่เกี่ยวข้องกับหลายหน้าต่าง ให้ใช้ทั้ง
"screenLayout"
และ"smallestScreenSize"
รองรับการทำงานแบบหลายหน้าต่างใน Android 7.0 (API ระดับ 24) ขึ้นไป android:directBootAware
กิจกรรมทราบถึงการบูตโดยตรงหรือไม่ กล่าวคือ กิจกรรมจะทำงานได้ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์หรือไม่
หมายเหตุ: ระหว่างการบูตโดยตรง กิจกรรมในแอปพลิเคชันจะเข้าถึงได้เฉพาะข้อมูลที่จัดเก็บไว้ในพื้นที่เก็บข้อมูลที่อุปกรณ์ปกป้องเท่านั้น
ค่าเริ่มต้นคือ
"false"
android:documentLaunchMode
- ระบุวิธีเพิ่มอินสแตนซ์ใหม่ของกิจกรรมลงในงานทุกครั้งที่เปิดใช้งาน
แอตทริบิวต์นี้อนุญาตให้ผู้ใช้มีเอกสารหลายรายการจากแอปพลิเคชันเดียวกันปรากฏในหน้าจอล่าสุด
แอตทริบิวต์นี้มี 4 ค่า ซึ่งจะทำให้เกิดผลดังต่อไปนี้เมื่อผู้ใช้เปิดเอกสารด้วยแอปพลิเคชัน
ค่า คำอธิบาย "intoExisting"
ระบบจะค้นหางานที่ ComponentName
และ URI ของข้อมูลของ Intent พื้นฐานตรงกับของ Intent การเริ่ม หากระบบพบงานดังกล่าว ระบบจะล้างงานและเริ่มใหม่ โดยที่กิจกรรมรูทได้รับการเรียกใช้onNewIntent(android.content.Intent)
หากไม่พบงานดังกล่าว ระบบจะสร้างงานใหม่"always"
กิจกรรมจะสร้างงานใหม่สำหรับเอกสาร แม้ว่าเอกสารจะเปิดอยู่แล้วก็ตาม ซึ่งจะเหมือนกับการตั้งค่าทั้ง Flag FLAG_ACTIVITY_NEW_DOCUMENT
และFLAG_ACTIVITY_MULTIPLE_TASK
"none"
กิจกรรมไม่ได้สร้างงานใหม่สําหรับกิจกรรม ค่านี้เป็นค่าเริ่มต้น ซึ่งจะสร้างงานใหม่เฉพาะเมื่อมีการตั้งค่า FLAG_ACTIVITY_NEW_TASK
เท่านั้น หน้าจอล่าสุดจะจัดการกิจกรรมตามค่าเริ่มต้น ซึ่งจะแสดงงานเดียวสําหรับแอป ซึ่งจะกลับมาทํางานต่อจากกิจกรรมที่ผู้ใช้เรียกใช้ครั้งล่าสุด"never"
ระบบจะไม่เปิดกิจกรรมในเอกสารใหม่ แม้ว่า Intent จะมี FLAG_ACTIVITY_NEW_DOCUMENT
ก็ตาม การตั้งค่านี้จะลบล้างลักษณะการทำงานของ FlagFLAG_ACTIVITY_NEW_DOCUMENT
และFLAG_ACTIVITY_MULTIPLE_TASK
หากมีการตั้งค่า Flag เหล่านี้ในกิจกรรม และหน้าจอ "ล่าสุด" จะแสดงงานเดียวสําหรับแอป ซึ่งจะกลับมาทํางานต่อจากกิจกรรมที่ผู้ใช้เรียกใช้ครั้งล่าสุดหมายเหตุ: สําหรับค่าที่ไม่ใช่
"none"
และ"never"
ระบบจะกําหนดกิจกรรมด้วยlaunchMode="standard"
หากไม่ได้ระบุแอตทริบิวต์นี้ ระบบจะใช้documentLaunchMode="none"
android:enabled
- ระบบสามารถสร้างอินสแตนซ์ของกิจกรรมได้หรือไม่ จะเป็น
"true"
หากทำได้ และ"false"
หากทำไม่ได้ ค่าเริ่มต้นคือ"true"
องค์ประกอบ
<application>
มีแอตทริบิวต์enabled
เป็นของตัวเอง ซึ่งมีผลกับคอมโพเนนต์แอปพลิเคชันทั้งหมด รวมถึงกิจกรรม แอตทริบิวต์<application>
และ<activity>
ต้องมีค่าเป็น"true"
ทั้งคู่ เนื่องจากค่าเริ่มต้นของแอตทริบิวต์ทั้ง 2 รายการเป็น"true"
เพื่อให้ระบบสร้างอินสแตนซ์ของกิจกรรมได้ หากค่าของตัวแปรใดตัวแปรหนึ่งเป็น"false"
ระบบจะสร้างอินสแตนซ์ไม่ได้ android:enableOnBackInvokedCallback
- Flag นี้ช่วยให้คุณเลือกใช้ภาพเคลื่อนไหวของระบบแบบคาดการณ์ที่ระดับกิจกรรมได้ ลักษณะการทำงานนี้ทำให้ย้ายข้อมูลแอปขนาดใหญ่ที่มีหลายกิจกรรมไปยังท่าทางสัมผัสย้อนกลับแบบคาดการณ์ได้ง่ายขึ้น
การตั้งค่า
android:enableOnBackInvokedCallback=false
จะปิดภาพเคลื่อนไหวย้อนกลับแบบคาดการณ์ที่ระดับกิจกรรมหรือระดับแอป ทั้งนี้ขึ้นอยู่กับตำแหน่งที่คุณตั้งค่าแท็ก และสั่งให้ระบบไม่สนใจการเรียกใช้ API ของแพลตฟอร์มOnBackInvokedCallback
android:excludeFromRecents
ระบุว่าจะยกเว้นงานซึ่งเริ่มต้นจากกิจกรรมนี้จาก screen หรือไม่ กล่าวคือ เมื่อกิจกรรมนี้เป็นกิจกรรมรูทของงานใหม่ แอตทริบิวต์นี้จะกำหนดว่างานจะปรากฏในรายการแอปล่าสุดหรือไม่
"true"
หากงานถูกยกเว้นจากรายการ"false"
หากงานรวมอยู่ ค่าเริ่มต้นคือ"false"
android:exported
คอมโพเนนต์ของแอปพลิเคชันอื่นๆ สามารถเปิดใช้งานกิจกรรมได้หรือไม่
- หากเป็น
"true"
แอปใดก็ได้จะเข้าถึงกิจกรรมดังกล่าวได้ และสามารถเปิดใช้งานด้วยชื่อคลาสที่ตรงกันทุกประการ - หากเป็น
"false"
กิจกรรมจะเปิดได้เฉพาะโดยคอมโพเนนต์ของแอปพลิเคชันเดียวกัน แอปพลิเคชันที่มีรหัสผู้ใช้เดียวกัน หรือคอมโพเนนต์ของระบบที่มีสิทธิ์ ค่านี้เป็นค่าเริ่มต้นเมื่อไม่มีตัวกรอง Intent
หาก Activity ในแอปมีตัวกรอง Intent ให้ตั้งค่าองค์ประกอบนี้เป็น
"true"
เพื่อให้แอปอื่นๆ เริ่ม Activity ได้ ตัวอย่างเช่น หากกิจกรรมเป็นกิจกรรมหลักของแอปและมีcategory
android.intent.category.LAUNCHER
หากตั้งค่าองค์ประกอบนี้เป็น
"false"
และแอปพยายามเริ่มกิจกรรม ระบบจะแสดงข้อผิดพลาดActivityNotFoundException
แอตทริบิวต์นี้ไม่ใช่วิธีเดียวในการจำกัดการแสดงกิจกรรมต่อแอปพลิเคชันอื่นๆ นอกจากนี้ ระบบยังใช้สิทธิ์เพื่อจำกัดเอนทิตีภายนอกที่เรียกใช้กิจกรรมได้ ดูแอตทริบิวต์
permission
- หากเป็น
android:finishOnTaskLaunch
- การปิดอินสแตนซ์ที่มีอยู่ของกิจกรรม ยกเว้นกิจกรรมรูท เมื่อผู้ใช้เปิดใช้งานงานอีกครั้งโดยเลือกงานบนหน้าจอหลัก จะเป็น
"true"
หากปิดอยู่ และ"false"
หากไม่ได้ปิด ค่าเริ่มต้นคือ"false"
หากแอตทริบิวต์นี้และ
allowTaskReparenting
มีค่าเป็น"true"
ทั้งคู่ แอตทริบิวต์นี้จะมีความสำคัญมากกว่า ระบบจะไม่สนใจความเกี่ยวข้องของกิจกรรม ระบบจะไม่จัดระเบียบกิจกรรมใหม่ แต่จะทำลายกิจกรรมนั้นระบบจะละเว้นแอตทริบิวต์นี้หากไม่ได้ตั้งค่า
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
android:hardwareAccelerated
- เปิดใช้การแสดงผลที่เร่งด้วยฮาร์ดแวร์สําหรับกิจกรรมนี้หรือไม่
"true"
หากเปิดใช้ และ"false"
หากไม่ได้เปิดใช้ ค่าเริ่มต้นคือ"false"
ใน Android 3.0 ขึ้นไป โปรแกรมแสดงผล OpenGL ที่เร่งด้วยฮาร์ดแวร์จะพร้อมใช้งานสำหรับแอปพลิเคชันเพื่อปรับปรุงประสิทธิภาพของการดำเนินการกราฟิก 2 มิติทั่วไปหลายรายการ เมื่อเปิดใช้โปรแกรมแสดงผลที่เร่งด้วยฮาร์ดแวร์ ระบบจะเร่งการดำเนินการส่วนใหญ่ใน Canvas, Paint, Xfermode, ColorFilter, Shader และกล้อง
ซึ่งส่งผลให้ภาพเคลื่อนไหวราบรื่นขึ้น การเลื่อนลื่นไหลขึ้น และตอบสนองโดยรวมดีขึ้น แม้แต่สำหรับแอปพลิเคชันที่ไม่ได้ใช้ไลบรารี OpenGL ของเฟรมเวิร์กอย่างชัดเจน แอปจะใช้ RAM มากขึ้นเนื่องจากต้องใช้ทรัพยากรมากขึ้นเพื่อเปิดใช้การเร่งด้วยฮาร์ดแวร์
การดำเนินการ OpenGL 2D บางรายการอาจไม่ได้รับการเร่ง หากคุณเปิดใช้โปรแกรมแสดงผลที่เร่งด้วยฮาร์ดแวร์ ให้ทดสอบว่าแอปพลิเคชันใช้โปรแกรมแสดงผลดังกล่าวได้โดยไม่มีข้อผิดพลาดหรือไม่
android:icon
ไอคอนที่แสดงถึงกิจกรรม ไอคอนจะแสดงต่อผู้ใช้เมื่อจำเป็นต้องแสดงกิจกรรมบนหน้าจอ เช่น ไอคอนสำหรับกิจกรรมที่เริ่มงานจะแสดงในหน้าต่าง Launcher ไอคอนมักจะมีป้ายกำกับอยู่ด้วย โปรดดูข้อมูลเกี่ยวกับป้ายกำกับในแอตทริบิวต์
android:label
แอตทริบิวต์นี้ตั้งค่าเป็นการอ้างอิงไปยังทรัพยากรที่วาดได้ซึ่งมีคำจำกัดความของรูปภาพ หากไม่ได้ตั้งค่าไว้ ระบบจะใช้ไอคอนที่ระบุสำหรับทั้งแอปพลิเคชันแทน ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์
icon
ขององค์ประกอบ<application>
ไอคอนของกิจกรรมไม่ว่าจะตั้งค่าที่นี่หรือโดยองค์ประกอบ
<application>
ก็ยังเป็นไอคอนเริ่มต้นสำหรับตัวกรอง Intent ทั้งหมดของกิจกรรมด้วย ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์icon
ของ<intent-filter>
android:immersive
- ตั้งค่าโหมดสมจริงสําหรับกิจกรรมปัจจุบัน หากเป็น
"true"
สมาชิกActivityInfo.flags
จะมีการตั้งค่าบิตFLAG_IMMERSIVE
เสมอ แม้ว่าโหมดสมจริงจะเปลี่ยนแปลงขณะรันไทม์โดยใช้เมธอดsetImmersive()
ก็ตาม android:label
ป้ายกำกับที่ผู้ใช้อ่านได้สำหรับกิจกรรม ป้ายกำกับจะแสดงบนหน้าจอเมื่อแสดงกิจกรรมต่อผู้ใช้ มักจะแสดงควบคู่ไปกับไอคอนกิจกรรม หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะใช้ป้ายกำกับที่ตั้งค่าไว้สำหรับแอปพลิเคชันโดยรวมแทน ดูแอตทริบิวต์
label
ขององค์ประกอบ<application>
ป้ายกำกับของกิจกรรม ไม่ว่าจะเป็นการตั้งค่าที่นี่หรือโดยองค์ประกอบ
<application>
จะเป็นป้ายกำกับเริ่มต้นสำหรับตัวกรอง Intent ทั้งหมดของกิจกรรมด้วย ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์label
ของ<intent-filter>
ระบบจะตั้งค่าป้ายกำกับเป็นข้อมูลอ้างอิงสำหรับทรัพยากรสตริงเพื่อให้แปลได้เช่นเดียวกับสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้ อย่างไรก็ตาม คุณสามารถตั้งค่าเป็นสตริงดิบได้เพื่อความสะดวกขณะพัฒนาแอปพลิเคชัน
android:launchMode
วิธีการเปิดใช้งานกิจกรรม โหมดมี 5 โหมด ซึ่งทำงานร่วมกับ Flag ของกิจกรรม (
FLAG_ACTIVITY_*
constant) ในออบเจ็กต์Intent
เพื่อกำหนดสิ่งที่จะเกิดขึ้นเมื่อมีการเรียกใช้กิจกรรมเพื่อจัดการ Intent"standard"
"singleTop"
"singleTask"
"singleInstance"
"singleInstancePerTask"
โหมดเริ่มต้นคือ
"standard"
ดังที่แสดงในตารางต่อไปนี้ โหมดต่างๆ จะแบ่งออกเป็น 2 กลุ่มหลัก โดยมีกิจกรรม
"standard"
และ"singleTop"
อยู่ด้านหนึ่ง และกิจกรรม"singleTask"
,"singleInstance"
และ"singleInstancePerTask"
อยู่อีกด้านหนึ่ง กิจกรรมที่มีโหมดการเริ่มทำงาน"standard"
หรือ"singleTop"
สามารถสร้างอินสแตนซ์ได้หลายครั้งอินสแตนซ์อาจเป็นของงานใดก็ได้ และอยู่ตรงไหนก็ได้ในกิจกรรมของงาน โดยปกติแล้ว ระบบจะเปิดใช้งานในหน้าที่เรียก
startActivity()
เว้นแต่ว่าออบเจ็กต์Intent
จะมีคำสั่งFLAG_ACTIVITY_NEW_TASK
ในกรณีนี้ระบบจะเลือกงานอื่น ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์taskAffinity
ในทางตรงกันข้าม กิจกรรม
"singleTask"
,"singleInstance"
และ"singleInstancePerTask"
มีลักษณะการทํางานที่แตกต่างกัน"singleInstancePerTask"
จะอยู่ที่รูทของงานกิจกรรมเสมอ นอกจากนี้ อุปกรณ์จะเก็บอินสแตนซ์ของกิจกรรม"singleInstance"
ได้ครั้งละ 1 รายการเท่านั้น ขณะที่กิจกรรม"singleInstancePerTask
สามารถสร้างอินสแตนซ์ได้หลายครั้งในภารกิจต่างๆ เมื่อตั้งค่าFLAG_ACTIVITY_MULTIPLE_TASK
หรือFLAG_ACTIVITY_NEW_DOCUMENT
กิจกรรมที่มีโหมดการเริ่ม
"singleTask"
จะรวมลักษณะการทํางานของ"singleInstance"
และ"singleInstancePerTask"
เข้าด้วยกัน กล่าวคือ สามารถสร้างอินสแตนซ์ของกิจกรรมได้หลายครั้งและสามารถวางไว้ที่ใดก็ได้ในภารกิจของtaskAffinity
เดียวกัน แต่อุปกรณ์จะเก็บงานได้เพียงงานเดียวสําหรับค้นหากิจกรรม"singleTask"
ที่รูทของงานกิจกรรมโหมด
"standard"
และ"singleTop"
แตกต่างกันตรงที่ว่าทุกครั้งที่มี Intent ใหม่สําหรับกิจกรรม"standard"
ระบบจะสร้างอินสแตนซ์ใหม่ของคลาสเพื่อตอบสนองต่อ Intent นั้น แต่ละอินสแตนซ์จะจัดการ Intent รายการเดียว ในทํานองเดียวกัน คุณยังสร้างอินสแตนซ์ใหม่ของกิจกรรม"singleTop"
เพื่อจัดการกับ Intent ใหม่ได้ด้วยอย่างไรก็ตาม หากงานเป้าหมายมีอินสแตนซ์ของกิจกรรมที่อยู่บนกองซ้อนอยู่แล้ว อินสแตนซ์นั้นจะรับ Intent ใหม่ในการเรียก
onNewIntent()
ระบบจะไม่สร้างอินสแตนซ์ใหม่ มิเช่นนั้น หากอินสแตนซ์ที่มีอยู่ของกิจกรรม"singleTop"
อยู่ในงานเป้าหมายแต่ไม่ได้อยู่ด้านบนของกอง หรือหากอยู่ด้านบนของกองแต่ไม่ได้อยู่ในงานเป้าหมาย ระบบจะสร้างอินสแตนซ์ใหม่และดันลงในกองในทํานองเดียวกัน หากผู้ใช้ไปยังกิจกรรมในกองซ้อนปัจจุบัน ลักษณะการทํางานจะขึ้นอยู่กับโหมดการเริ่มของกิจกรรมหลัก หากกิจกรรมหลักมีโหมดเปิด
singleTop
(หรือ Intentup
มีFLAG_ACTIVITY_CLEAR_TOP
) ระบบจะนำกิจกรรมหลักไปไว้ที่ด้านบนของกอง และเก็บสถานะของกิจกรรมไว้วิธีการ
onNewIntent()
ของกิจกรรมหลักจะรับความตั้งใจในการไปยังส่วนต่างๆ หากกิจกรรมหลักมีโหมดเปิดstandard
และ Intentup
ไม่มีFLAG_ACTIVITY_CLEAR_TOP
กิจกรรมปัจจุบันและกิจกรรมหลักจะออกจากกองซ้อน และระบบจะสร้างอินสแตนซ์ใหม่ของกิจกรรมหลักเพื่อรับ Intent การนำทางโหมด
"singleInstance"
ยังแตกต่างจาก"singleTask"
และ"singleInstancePerTask"
ตรงจุดเดียวเท่านั้น คือ กิจกรรมที่มีโหมดเปิด"singleTask"
หรือ"singleInstancePerTask"
จะทําให้กิจกรรมอื่นๆ ซึ่งต้องเป็นกิจกรรม"standard"
และ"singleTop"
เป็นส่วนหนึ่งของงานได้ในทางกลับกัน กิจกรรม
"singleInstance"
จะไม่อนุญาตให้กิจกรรมอื่นเป็นส่วนหนึ่งของงาน โดยต้องเป็นกิจกรรมเดียวในงาน หากเริ่มกิจกรรมอื่น ระบบจะกำหนดกิจกรรมนั้นให้กับงานอื่น เหมือนกับว่าFLAG_ACTIVITY_NEW_TASK
อยู่ใน Intentกรณีการใช้งาน โหมดเปิดใช้งาน มีอินสแตนซ์หลายรายการไหม ความคิดเห็น การเปิดตัวแบบปกติสําหรับกิจกรรมส่วนใหญ่ "standard"
ใช่ ค่าเริ่มต้น ระบบจะสร้างอินสแตนซ์ใหม่ของกิจกรรมในภารกิจเป้าหมายและกำหนดเส้นทาง Intent ไปยังอินสแตนซ์นั้นเสมอ "singleTop"
ตามเงื่อนไข หากอินสแตนซ์ของกิจกรรมมีอยู่แล้วที่ด้านบนของงานเป้าหมาย ระบบจะกำหนดเส้นทาง Intent ไปยังอินสแตนซ์นั้นผ่านการเรียกใช้เมธอด onNewIntent()
แทนการสร้างอินสแตนซ์ใหม่ของกิจกรรมการเปิดตัวเฉพาะ
(ไม่แนะนําสําหรับการใช้งานทั่วไป)"singleTask"
ตามเงื่อนไข ระบบจะสร้างกิจกรรมที่รูทของงานใหม่หรือค้นหากิจกรรมในงานที่มีอยู่ซึ่งมีความเกี่ยวข้องเดียวกัน หากอินสแตนซ์ของกิจกรรมมีอยู่แล้วและอยู่ที่รูทของงาน ระบบจะกำหนดเส้นทาง Intent ไปยังอินสแตนซ์ที่มีอยู่ผ่านการเรียกใช้เมธอด onNewIntent()
แทนที่จะสร้างอินสแตนซ์ใหม่"singleInstance"
ไม่ เหมือนกับ "singleTask"
ยกเว้นว่าระบบจะไม่เปิดกิจกรรมอื่นๆ ในภารกิจที่มีอินสแตนซ์ กิจกรรมจะเป็นสมาชิกเพียงคนเดียวของงานเสมอ"singleInstancePerTask"
ตามเงื่อนไข กิจกรรมจะทํางานได้เฉพาะในฐานะกิจกรรมรูทของงาน ซึ่งเป็นกิจกรรมแรกที่สร้างงาน ดังนั้นจึงมีอินสแตนซ์ของกิจกรรมนี้เพียงรายการเดียวในหนึ่งงาน อย่างไรก็ตาม กิจกรรมสามารถสร้างอินสแตนซ์ได้หลายครั้งในงานต่างๆ ดังที่แสดงในตารางก่อนหน้า
"standard"
คือโหมดเริ่มต้นและเหมาะสำหรับกิจกรรมเกือบทุกประเภท"singleTop"
ยังเป็นโหมดการเริ่มใช้งานที่พบได้ทั่วไปและมีประโยชน์สําหรับกิจกรรมหลายประเภท โหมดอื่นๆ ซึ่งได้แก่"singleTask"
,"singleInstance"
และ"singleInstancePerTask"
ไม่เหมาะสําหรับแอปพลิเคชันส่วนใหญ่ ซึ่งส่งผลให้รูปแบบการโต้ตอบมีแนวโน้มที่ผู้ใช้จะไม่คุ้นเคยและแตกต่างจากแอปพลิเคชันอื่นๆ ส่วนใหญ่มากไม่ว่าคุณจะเลือกโหมดเปิดใช้งานใดก็ตาม อย่าลืมทดสอบความสามารถในการใช้งานของกิจกรรมระหว่างเปิดใช้งานและเมื่อไปยังกิจกรรมนั้นอีกครั้งจากกิจกรรมและงานอื่นๆ โดยใช้ปุ่มย้อนกลับ
ดูข้อมูลเพิ่มเติมเกี่ยวกับโหมดการเริ่มและการทำงานร่วมกับ
Intent
ตัวเลือกได้ที่งานและกองซ้อนที่แสดงอยู่เบื้องหลังandroid:lockTaskMode
- กำหนดวิธีที่ระบบแสดงกิจกรรมนี้เมื่ออุปกรณ์ทำงานในโหมดงานแบบล็อก
Android สามารถทำงานในโหมดที่สมจริงซึ่งคล้ายกับคีออสก์ได้ ซึ่งเรียกว่าโหมดล็อกงาน เมื่อระบบทำงานในโหมดงานในโหมดล็อก ผู้ใช้อุปกรณ์มักจะไม่เห็นการแจ้งเตือน เข้าถึงแอปที่ไม่ได้อยู่ในรายการที่อนุญาต หรือกลับไปที่หน้าจอหลัก เว้นแต่ว่าแอป Home จะอยู่ในรายการที่อนุญาต
เฉพาะแอปที่อยู่ในรายการที่อนุญาตโดยเครื่องมือควบคุมนโยบายด้านอุปกรณ์ (DPC) เท่านั้นที่จะทำงานได้เมื่อระบบอยู่ในโหมดงานแบบล็อก อย่างไรก็ตาม ระบบและแอปที่มีสิทธิ์จะทำงานในโหมดงานแบบล็อกได้โดยไม่ต้องอยู่ในรายการที่อนุญาต
ค่าอาจเป็นค่าสตริง
R.attr.lockTaskMode
ใดค่าหนึ่งต่อไปนี้ค่า คำอธิบาย "normal"
ค่าเริ่มต้น ซึ่งเป็นค่าเริ่มต้น Tasks จะไม่เปิดในโหมดล็อกงาน แต่สามารถวางไว้ในโหมดดังกล่าวได้โดยเรียกใช้ startLockTask()
"never"
Tasks จะไม่เปิดในโหมด
lockTask
และผู้ใช้อุปกรณ์จะปักหมุด Tasks เหล่านี้จากหน้าจอ "ล่าสุด" ไม่ได้หมายเหตุ: โหมดนี้ใช้ได้กับระบบและแอปพลิเคชันที่มีสิทธิ์เท่านั้น ระบบจะถือว่าแอปที่ไม่มีสิทธิ์ซึ่งมีค่านี้เป็น
normal
"if_whitelisted"
หาก DPC ให้สิทธิ์แพ็กเกจนี้โดยใช้ DevicePolicyManager.setLockTaskPackages()
โหมดนี้จะเหมือนกับalways
ยกเว้นว่ากิจกรรมต้องเรียกใช้stopLockTask()
ก่อนจึงจะทำงานเสร็จได้หากเป็นงานที่ล็อกไว้ล่าสุด หาก DPC ไม่ได้ให้สิทธิ์แพ็กเกจนี้ โหมดนี้จะเหมือนกับnormal
"always"
งานที่มีรูทที่กิจกรรมนี้จะเปิดในโหมดงานแบบล็อกเสมอ หากระบบอยู่ในโหมดงานแบบล็อกอยู่แล้วเมื่อเปิดใช้งานงานนี้ ระบบจะเปิดใช้งานงานใหม่บนงานปัจจุบัน งานที่เปิดในโหมดนี้จะออกจากโหมดล็อกงานได้โดยเรียกใช้
finish()
หมายเหตุ: โหมดนี้ใช้ได้กับระบบและแอปพลิเคชันที่มีสิทธิ์เท่านั้น ระบบจะถือว่าแอปที่ไม่มีสิทธิ์ซึ่งมีค่านี้เป็น
normal
แอตทริบิวต์นี้เปิดตัวใน API ระดับ 23
android:maxRecents
- จำนวนงานสูงสุดที่มาจากกิจกรรมนี้ใน screen ล่าสุด เมื่อถึงจำนวนรายการนี้ ระบบจะนำอินสแตนซ์ที่ใช้ล่าสุดน้อยที่สุดออกจากหน้าจอล่าสุด ค่าที่ใช้ได้คือจำนวนเต็มตั้งแต่ 1 ถึง 50 หรือ 1 ถึง 25 ในอุปกรณ์ที่มีหน่วยความจําต่ำ 0 ไม่ถูกต้อง ค่าเริ่มต้นคือ 16
android:maxAspectRatio
สัดส่วนภาพสูงสุดที่กิจกรรมรองรับ หากแอปทำงานในอุปกรณ์ที่มีสัดส่วนภาพกว้างกว่า ระบบจะใส่แถบดำด้านบนและด้านล่างแอปโดยอัตโนมัติ โดยเว้นพื้นที่บางส่วนของหน้าจอไว้เพื่อให้แอปทำงานในสัดส่วนภาพสูงสุดที่ระบุ
อัตราส่วนภาพสูงสุดจะแสดงเป็นรูปแบบทศนิยมของผลหารระหว่างมิติข้อมูลที่ยาวกว่าของอุปกรณ์หารด้วยมิติข้อมูลที่สั้นกว่า เช่น หากสัดส่วนภาพสูงสุดคือ 7:3 ให้ตั้งค่าแอตทริบิวต์นี้เป็น 2.33
ในอุปกรณ์ที่ไม่ใช่อุปกรณ์ที่สวมใส่ได้ ค่าของแอตทริบิวต์นี้ต้องเท่ากับหรือมากกว่า 1.33 ในอุปกรณ์ที่สวมใส่ได้ เวอร์ชันต้องเป็น 1.0 ขึ้นไป ไม่เช่นนั้น ระบบจะไม่สนใจค่าที่กําหนด
หมายเหตุ: ระบบจะไม่สนใจแอตทริบิวต์นี้หากกิจกรรมมีการตั้งค่า
resizeableActivity
เป็น "จริง" เนื่องจากหมายความว่ากิจกรรมรองรับทุกขนาดดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์นี้ได้ที่ประกาศสัดส่วนภาพสูงสุด
android:multiprocess
- สามารถเปิดอินสแตนซ์ของกิจกรรมในกระบวนการของคอมโพเนนต์ที่เริ่มต้นกิจกรรมได้หรือไม่ จะเป็น
"true"
หากทำได้ และ"false"
หากทำไม่ได้ ค่าเริ่มต้นคือ"false"
โดยปกติแล้ว ระบบจะเปิดอินสแตนซ์ใหม่ของกิจกรรมในกระบวนการของแอปพลิเคชันที่กําหนดไว้ เพื่อให้อินสแตนซ์ทั้งหมดของกิจกรรมทํางานในกระบวนการเดียวกัน อย่างไรก็ตาม หากตั้งค่า Flag นี้เป็น
"true"
อินสแตนซ์ของกิจกรรมจะทํางานในหลายกระบวนการได้ ซึ่งจะช่วยให้ระบบสร้างอินสแตนซ์ได้ทุกที่ที่มีการใช้งาน ในกรณีที่สิทธิ์อนุญาต ซึ่งแทบจะไม่เคยจําเป็นหรือต้องการ android:name
- ชื่อคลาสที่ใช้กิจกรรม ซึ่งเป็นคลาสย่อยของ
Activity
โดยปกติแล้วค่าแอตทริบิวต์จะเป็นชื่อคลาสที่มีคุณสมบัติครบถ้วน เช่น"com.example.project.ExtracurricularActivity"
อย่างไรก็ตาม หากอักขระแรกของชื่อเป็นจุด เช่น".ExtracurricularActivity"
ระบบจะต่อท้ายเนมสเปซที่ระบุไว้ในไฟล์build.gradle
เมื่อเผยแพร่แอปพลิเคชันแล้ว อย่าเปลี่ยนแปลงชื่อนี้ เว้นแต่คุณจะตั้งค่า
android:exported="false"
ไม่มีค่าเริ่มต้น ต้องระบุชื่อ android:noHistory
- ระบุว่ากิจกรรมถูกนําออกจากกองกิจกรรมและสิ้นสุดแล้วหรือไม่ โดยเรียกใช้เมธอด
finish()
เมื่อผู้ใช้ไปยังส่วนอื่นและกิจกรรมนั้นไม่แสดงบนหน้าจออีกต่อไป โดยค่าเริ่มต้นจะเป็น"true"
หากเสร็จสิ้นแล้ว และ"false"
หากยังไม่เสร็จสิ้น ค่าเริ่มต้นคือ"false"
ค่า
"true"
หมายความว่ากิจกรรมไม่ได้ทิ้งร่องรอยที่ผ่านมา รายการดังกล่าวจะไม่อยู่ในกองงานของงาน ดังนั้นผู้ใช้จึงไม่สามารถกลับไปดูรายการนั้นได้ ในกรณีนี้ ระบบจะไม่เรียกonActivityResult()
เลยหากคุณเริ่มกิจกรรมอื่นเพื่อดูผลลัพธ์จากกิจกรรมนี้แอตทริบิวต์นี้เปิดตัวใน API ระดับ 3
android:parentActivityName
- ชื่อคลาสของรายการหลักเชิงตรรกะของกิจกรรม ชื่อที่นี่ต้องตรงกับชื่อคลาสที่ให้ไว้กับแอตทริบิวต์
android:name
ขององค์ประกอบ<activity>
ที่เกี่ยวข้องระบบจะอ่านแอตทริบิวต์นี้เพื่อกำหนดกิจกรรมที่จะเริ่มต้นเมื่อผู้ใช้แตะปุ่มขึ้นในแถบการดำเนินการ นอกจากนี้ ระบบยังใช้ข้อมูลนี้เพื่อสังเคราะห์กองซ้อนของกิจกรรมย้อนกลับด้วย
TaskStackBuilder
ได้อีกด้วยหากต้องการรองรับ API ระดับ 4-16 คุณสามารถประกาศกิจกรรมหลักด้วยองค์ประกอบ
<meta-data>
ที่ระบุค่าสำหรับ"android.support.PARENT_ACTIVITY"
ดังนี้<activity android:name="com.example.app.ChildActivity" android:label="@string/title_child_activity" android:parentActivityName="com.example.app.MainActivity" > <!-- Parent activity meta-data to support API level 4+ --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.app.MainActivity" /> </activity>
ดูข้อมูลเพิ่มเติมเกี่ยวกับการประกาศกิจกรรมหลักเพื่อรองรับการไปยังส่วนบนได้ที่การไปยังส่วนบน
แอตทริบิวต์นี้เปิดตัวใน API ระดับ 16
android:persistableMode
กําหนดวิธีเก็บอินสแตนซ์ของกิจกรรมภายในงานที่บรรจุอยู่เมื่ออุปกรณ์รีสตาร์ท
หากกิจกรรมรูทของงานตั้งค่าแอตทริบิวต์นี้เป็น
persistRootOnly
ระบบจะเก็บเฉพาะกิจกรรมรูทไว้ ไม่เช่นนั้น ระบบจะตรวจสอบกิจกรรมที่อยู่สูงขึ้นในกองซ้อนที่ย้อนกลับของงาน โดยระบบจะเก็บรักษากิจกรรมใดๆ ที่ตั้งค่าแอตทริบิวต์นี้เป็นpersistAcrossReboots
หากใช้แอตทริบิวต์นี้ คุณต้องตั้งค่าแอตทริบิวต์เป็นค่าใดค่าหนึ่งต่อไปนี้
ค่า คำอธิบาย persistRootOnly
ค่าเริ่มต้น เมื่อระบบรีสตาร์ท ระบบจะเก็บงานของกิจกรรมไว้ แต่จะใช้เฉพาะ Intent การเริ่มของกิจกรรมรูทเท่านั้น
เมื่อ Intent การเริ่มต้นของแอปโหลดกิจกรรมรูทของแอป กิจกรรมดังกล่าวจะไม่รับออบเจ็กต์
PersistableBundle
ดังนั้น อย่าใช้onSaveInstanceState()
เพื่อรักษาสถานะของกิจกรรมรูทของแอปในอุปกรณ์ต่างๆ เมื่อรีสตาร์ทหมายเหตุ: ค่าแอตทริบิวต์นี้จะส่งผลต่อลักษณะการทํางานของแอปก็ต่อเมื่อตั้งค่าไว้ในกิจกรรมรูทของแอปเท่านั้น
persistAcrossReboots
ระบบจะเก็บสถานะของกิจกรรมนี้ไว้ รวมถึงสถานะของกิจกรรมแต่ละรายการที่สูงขึ้นในกองแบ็กที่ตั้งค่าแอตทริบิวต์
persistableMode
เป็นpersistAcrossReboots
หากกิจกรรมไม่มีแอตทริบิวต์persistableMode
ที่ตั้งค่าเป็นpersistAcrossReboots
หรือหากมีการเปิดใช้งานโดยใช้ FlagIntent.FLAG_ACTIVITY_NEW_DOCUMENT
ระบบจะไม่เก็บกิจกรรมนั้นไว้ รวมถึงกิจกรรมทั้งหมดที่ซ้อนกันอยู่ด้านบนเมื่อ Intent โหลดกิจกรรมที่มีการตั้งค่าแอตทริบิวต์
persistableMode
เป็นpersistAcrossReboots
ในแอป กิจกรรมจะได้รับออบเจ็กต์PersistableBundle
ในเมธอดonCreate()
คุณจึงใช้onSaveInstanceState()
เพื่อรักษาสถานะของกิจกรรมเมื่ออุปกรณ์รีสตาร์ทได้ ตราบใดที่ค่าแอตทริบิวต์persistableMode
ของกิจกรรมเป็นpersistAcrossReboots
หมายเหตุ: ค่าแอตทริบิวต์นี้จะส่งผลต่อลักษณะการทํางานของแอป แม้ว่าจะตั้งค่าไว้ในกิจกรรมอื่นที่ไม่ใช่กิจกรรมรูทของแอปก็ตาม
persistNever
ระบบจะไม่เก็บสถานะของกิจกรรมไว้
หมายเหตุ: ค่าแอตทริบิวต์นี้จะส่งผลต่อลักษณะการทํางานของแอปก็ต่อเมื่อตั้งค่าไว้ในกิจกรรมรูทของแอปเท่านั้น
แอตทริบิวต์นี้เปิดตัวใน API ระดับ 21
android:permission
- ชื่อสิทธิ์ที่ไคลเอ็นต์ต้องมีเพื่อเปิดใช้งานกิจกรรม หรือทำให้กิจกรรมตอบสนองต่อ Intent หากผู้เรียกใช้
startActivity()
หรือstartActivityForResult()
ไม่ได้รับสิทธิ์ที่ระบุ ระบบจะไม่ส่งความตั้งใจไปยังกิจกรรมหากไม่ได้ตั้งค่าแอตทริบิวต์นี้ สิทธิ์ที่ตั้งค่าโดยแอตทริบิวต์
<application>
ขององค์ประกอบpermission
จะมีผลกับกิจกรรม หากไม่ได้ตั้งค่าแอตทริบิวต์ใดเลย กิจกรรมจะไม่ได้รับการปกป้องโดยสิทธิ์ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ได้ที่ส่วนสิทธิ์ของภาพรวมไฟล์ Manifest ของแอปและเคล็ดลับด้านความปลอดภัย
android:process
ชื่อของกระบวนการที่กิจกรรมทํางาน โดยปกติแล้ว คอมโพเนนต์ทั้งหมดของแอปพลิเคชันจะทํางานในชื่อกระบวนการเริ่มต้นที่สร้างสําหรับแอปพลิเคชัน และคุณไม่จําเป็นต้องใช้แอตทริบิวต์นี้ แต่หากจำเป็น คุณสามารถลบล้างชื่อกระบวนการเริ่มต้นด้วยแอตทริบิวต์นี้ ซึ่งจะช่วยให้คุณกระจายคอมโพเนนต์แอปไปยังหลายกระบวนการได้
หากชื่อที่กำหนดให้กับแอตทริบิวต์นี้ขึ้นต้นด้วยโคลอน (
:
) ระบบจะสร้างกระบวนการใหม่ที่เป็นส่วนตัวสำหรับแอปพลิเคชันเมื่อจำเป็น และกิจกรรมจะทำงานในกระบวนการนั้นหากชื่อกระบวนการขึ้นต้นด้วยอักขระตัวพิมพ์เล็ก กิจกรรมจะทํางานในกระบวนการส่วนกลางที่มีชื่อนั้น โดยมีเงื่อนไขว่าได้รับสิทธิ์ให้ทําเช่นนั้น ซึ่งจะช่วยให้คอมโพเนนต์ในแอปพลิเคชันต่างๆ ใช้กระบวนการร่วมกันได้ จึงช่วยลดการใช้ทรัพยากร
แอตทริบิวต์
process
ขององค์ประกอบ<application>
สามารถตั้งชื่อกระบวนการเริ่มต้นอื่นสำหรับคอมโพเนนต์ทั้งหมดได้android:relinquishTaskIdentity
กิจกรรมจะยกเลิกตัวระบุงานให้กับกิจกรรมที่อยู่เหนือในกองงานหรือไม่ งานที่มีกิจกรรมรูทซึ่งตั้งค่าแอตทริบิวต์นี้เป็น
"true"
จะแทนที่ฐานIntent
ด้วยกิจกรรมถัดไปในงานหากกิจกรรมถัดไปมีการตั้งค่าแอตทริบิวต์นี้เป็น
"true"
ด้วย ก็จะให้Intent
พื้นฐานแก่กิจกรรมที่เปิดใช้งานในภารกิจเดียวกัน การดำเนินการนี้จะดำเนินต่อไปสำหรับแต่ละกิจกรรมจนกว่าจะพบกิจกรรมที่มีการตั้งค่าแอตทริบิวต์นี้เป็น"false"
ค่าเริ่มต้นคือ"false"
การตั้งค่าแอตทริบิวต์นี้เป็น
"true"
ยังอนุญาตให้กิจกรรมใช้ActivityManager.TaskDescription
เพื่อเปลี่ยนป้ายกำกับ สี และไอคอนในหน้าจอล่าสุดด้วยandroid:requireContentUriPermissionFromCaller
-
ระบุสิทธิ์ที่จําเป็นในการเปิดใช้งานกิจกรรมนี้เมื่อส่ง URI ของเนื้อหา ค่าเริ่มต้นคือ
none
ซึ่งหมายความว่าไม่จําเป็นต้องมีสิทธิ์ที่เฉพาะเจาะจง การตั้งค่าแอตทริบิวต์นี้จะจํากัดการเรียกใช้กิจกรรมตามสิทธิ์ของผู้เรียกใช้ หากผู้เรียกใช้ไม่มีสิทธิ์ที่จําเป็น ระบบจะปฏิเสธการเริ่มกิจกรรมผ่านSecurityException
โปรดทราบว่าการบังคับใช้จะใช้กับ URI เนื้อหาภายใน
Intent.getData()
,Intent.EXTRA_STREAM
และIntent.getClipData()
อาจเป็นค่าสตริงโดยใช้ '\\;' เพื่อหลีกอักขระ เช่น '\\n' หรือ '\\uxxxx' สำหรับอักขระ Unicode
ต้องเป็นค่าคงที่ค่าใดค่าหนึ่งต่อไปนี้
ค่าคงที่ ค่า คำอธิบาย ไม่มี 0 โดยค่าเริ่มต้น ไม่จำเป็นต้องมีสิทธิ์เฉพาะ อ่าน 1 บังคับให้ผู้เรียกใช้มีสิทธิ์อ่าน URI เนื้อหาที่ส่ง readAndWrite 4 บังคับให้ผู้เรียกใช้มีสิทธิ์ทั้งอ่านและเขียน URI ของเนื้อหาที่ส่ง readOrWrite 3 บังคับให้ผู้เรียกใช้มีสิทธิ์อ่านหรือเขียน URI เนื้อหาที่ส่ง เขียนหน่อย 2 บังคับให้ผู้เรียกใช้มีสิทธิ์เขียน URI เนื้อหาที่ส่ง android:resizeableActivity
-
ระบุว่าแอปรองรับโหมดหลายหน้าต่างหรือไม่ คุณตั้งค่าแอตทริบิวต์นี้ได้ในองค์ประกอบ
<activity>
หรือ<application>
หากคุณตั้งค่าแอตทริบิวต์นี้เป็น
"true"
ผู้ใช้จะเปิดกิจกรรมในโหมดแยกหน้าจอและโหมดอิสระได้ หากคุณตั้งค่าแอตทริบิวต์เป็น"false"
ระบบจะทดสอบหรือเพิ่มประสิทธิภาพแอปสำหรับสภาพแวดล้อมแบบหลายหน้าต่างไม่ได้ ระบบจะยังคงแสดงกิจกรรมในโหมดหลายหน้าต่างได้เมื่อใช้โหมดความเข้ากันได้การตั้งค่าแอตทริบิวต์นี้เป็น
"false"
ไม่ได้รับประกันว่าจะไม่มีแอปอื่นๆ ในโหมดหลายหน้าต่างที่แสดงบนหน้าจอ เช่น ในโหมดภาพซ้อนภาพ หรือในจอแสดงผลอื่นๆ ดังนั้น การตั้งค่า Flag นี้ไม่ได้หมายความว่าแอปของคุณมีสิทธิ์เข้าถึงทรัพยากรแบบพิเศษหากแอปกำหนดเป้าหมายเป็น API ระดับ 24 ขึ้นไปและคุณไม่ได้ระบุค่าสำหรับแอตทริบิวต์นี้ ค่าเริ่มต้นของแอตทริบิวต์จะเป็น
"true"
หากแอปกำหนดเป้าหมายเป็น API ระดับ 31 ขึ้นไป แอตทริบิวต์นี้จะทำงานแตกต่างกันในหน้าจอขนาดเล็กและขนาดใหญ่ ดังนี้
- หน้าจอขนาดใหญ่ (sw >= 600dp): แอปทั้งหมดรองรับโหมดหลายหน้าต่าง แอตทริบิวต์นี้จะระบุว่าแอปปรับขนาดได้หรือไม่ ไม่ใช่ว่าแอปรองรับโหมดหลายหน้าต่างหรือไม่ หากเป็น
resizeableActivity="false"
ระบบจะใส่แอปไว้ในโหมดความเข้ากันได้เมื่อจำเป็นเพื่อให้สอดคล้องกับขนาดการแสดงผล - หน้าจอขนาดเล็ก (sw < 600dp): หาก
resizeableActivity="true"
และความกว้างและความสูงขั้นต่ำของกิจกรรมอยู่ภายในข้อกำหนดของโหมดหลายหน้าต่าง แอปจะรองรับโหมดหลายหน้าต่าง หากเป็นresizeableActivity="false"
แอปจะไม่รองรับโหมดหลายหน้าต่าง ไม่ว่าความกว้างและความสูงขั้นต่ำของกิจกรรมจะเป็นอย่างไรก็ตาม
หมายเหตุ: ผู้ผลิตอุปกรณ์สามารถลบล้างลักษณะการทํางานของ API ระดับ 31 ได้
แอตทริบิวต์นี้เพิ่มเข้ามาใน API ระดับ 24
หมายเหตุ: ค่ากิจกรรมรูทของงานจะมีผลกับกิจกรรมเพิ่มเติมทั้งหมดที่เปิดใช้งานในนั้น กล่าวคือ หากกิจกรรมรูทของงานปรับขนาดได้ ระบบจะถือว่ากิจกรรมอื่นๆ ทั้งหมดในงานนี้ปรับขนาดได้ หากกิจกรรมรูทปรับขนาดไม่ได้ กิจกรรมอื่นๆ ในแท็บงานก็จะปรับขนาดไม่ได้เช่นกัน
- หน้าจอขนาดใหญ่ (sw >= 600dp): แอปทั้งหมดรองรับโหมดหลายหน้าต่าง แอตทริบิวต์นี้จะระบุว่าแอปปรับขนาดได้หรือไม่ ไม่ใช่ว่าแอปรองรับโหมดหลายหน้าต่างหรือไม่ หากเป็น
android:screenOrientation
การวางแนวของกิจกรรมที่ขอ
เมื่อกิจกรรมเต็มหน้าจอ การวางแนวที่ขอจะทำหน้าที่เป็นคำแนะนำให้เปลี่ยนการวางแนวในหน้าจอนั้นให้ตรงกับค่าที่ขอ ซึ่งอาจส่งผลให้การวางแนวแตกต่างจากการวางแนวจริงของหน้าจอในอวกาศ ผู้ใช้จึงต้องหมุนอุปกรณ์เพื่อใช้แอปต่อ ใน Android 12 (API ระดับ 31) ขึ้นไป ผู้ผลิตอุปกรณ์สามารถกำหนดค่าหน้าจอของอุปกรณ์แต่ละเครื่อง (เช่น หน้าจอขนาดแท็บเล็ตของอุปกรณ์แบบพับได้) ให้ละเว้นคำแนะนำนี้ และบังคับให้กิจกรรมแสดงในแถบดำด้านบนและล่างภายในการวางแนวของอุปกรณ์ที่ผู้ใช้ต้องการแทน ซึ่งส่งผลให้การวางแนวของกิจกรรมตรงกับที่ขอโดยที่ผู้ใช้ไม่ต้องหมุนอุปกรณ์
ในโหมดหลายหน้าต่าง การวางแนวที่ขอจะไม่ใช้เป็นคำแนะนำสำหรับการวางแนวโดยรวม หากกิจกรรมมีการใส่แถบดำ การวางแนวที่ขอจะมีผลกับการใส่แถบดำที่ใช้กับกิจกรรม
ค่าอาจเป็นสตริงใดก็ได้ต่อไปนี้
"unspecified"
ค่าเริ่มต้น ระบบจะเลือกการวางแนว นโยบายที่ใช้และตัวเลือกที่เลือกในบริบทหนึ่งๆ จึงอาจแตกต่างกันไปในแต่ละอุปกรณ์ "behind"
การวางแนวเดียวกับกิจกรรมที่อยู่ด้านล่างในกองกิจกรรม "landscape"
การวางแนวแนวนอน (จอแสดงผลกว้างกว่าสูง) "portrait"
การวางแนวตั้ง (จอแสดงผลสูงกว่าความกว้าง) "reverseLandscape"
การวางแนวนอนในทิศทางตรงข้ามกับแนวนอนปกติ เพิ่มใน API ระดับ 9 "reversePortrait"
การวางแนวตั้งในทิศทางตรงข้ามกับแนวตั้งปกติ เพิ่มใน API ระดับ 9 "sensorLandscape"
แนวนอน แต่อาจเป็นแนวนอนปกติหรือแนวนอนกลับก็ได้ โดยขึ้นอยู่กับเซ็นเซอร์ของอุปกรณ์ ระบบจะใช้เซ็นเซอร์แม้ว่าผู้ใช้จะล็อกการหมุนตามเซ็นเซอร์ไว้แล้วก็ตาม เพิ่มใน API ระดับ 9 "sensorPortrait"
การวางแนวเป็นแนวตั้ง แต่อาจเป็นแนวตั้งปกติหรือแนวตั้งกลับก็ได้ โดยขึ้นอยู่กับเซ็นเซอร์ของอุปกรณ์ ระบบจะใช้เซ็นเซอร์แม้ว่าผู้ใช้จะล็อกการหมุนตามเซ็นเซอร์ไว้แล้วก็ตาม อย่างไรก็ตาม ระบบอาจไม่อนุญาตให้หมุนกลับหัว ทั้งนี้ขึ้นอยู่กับการกำหนดค่าอุปกรณ์ เพิ่มใน API ระดับ 9 "userLandscape"
แนวนอน แต่อาจเป็นแนวนอนปกติหรือแนวนอนกลับก็ได้ โดยขึ้นอยู่กับเซ็นเซอร์ของอุปกรณ์และความต้องการของผู้ใช้ เพิ่มใน API ระดับ 18 "userPortrait"
การวางแนวแนวตั้ง แต่อาจเป็นแนวตั้งปกติหรือแนวตั้งกลับก็ได้ โดยขึ้นอยู่กับเซ็นเซอร์ของอุปกรณ์และความชอบของผู้ใช้ อย่างไรก็ตาม ระบบอาจไม่อนุญาตให้หมุนกลับหัว ทั้งนี้ขึ้นอยู่กับการกำหนดค่าอุปกรณ์ เพิ่มใน API ระดับ 18 "sensor"
เซ็นเซอร์การวางแนวของอุปกรณ์จะกำหนดการวางแนว การวางแนวของการแสดงผลขึ้นอยู่กับวิธีที่ผู้ใช้ถืออุปกรณ์ ซึ่งจะเปลี่ยนไปเมื่อผู้ใช้หมุนอุปกรณ์ อย่างไรก็ตาม อุปกรณ์บางเครื่องจะไม่หมุนไปยังการวางแนวทั้ง 4 แบบโดยค่าเริ่มต้น หากต้องการใช้การวางแนวทั้ง 4 แบบ ให้ใช้ "fullSensor"
ระบบจะใช้เซ็นเซอร์แม้ว่าผู้ใช้จะล็อกการหมุนตามเซ็นเซอร์ไว้ก็ตาม"fullSensor"
เซ็นเซอร์การวางแนวของอุปกรณ์จะกำหนดการวางแนวสำหรับการวางแนวทั้ง 4 แบบ นโยบายนี้คล้ายกับ "sensor"
ยกเว้นว่านโยบายนี้อนุญาตให้ใช้การวางแนวหน้าจอได้ 4 แบบไม่ว่าจะรองรับหรือไม่ก็ตาม เช่น ปกติแล้วอุปกรณ์บางรุ่นจะไม่ใช้การวางแนวกลับหัวตั้งหรือกลับหัวนอน แต่การตั้งค่านี้จะเปิดใช้การวางแนวเหล่านั้น เพิ่มใน API ระดับ 9"nosensor"
ระบบจะกำหนดการวางแนวโดยไม่ได้อ้างอิงถึงเซ็นเซอร์การวางแนวของอุปกรณ์ ระบบจะไม่สนใจเซ็นเซอร์นี้ ดังนั้นจอแสดงผลจะไม่หมุนตามวิธีที่ผู้ใช้ย้ายอุปกรณ์ "user"
การวางแนวที่ผู้ใช้ต้องการในปัจจุบัน "fullUser"
หากผู้ใช้ล็อกการหมุนตามเซ็นเซอร์ไว้ ตัวเลือกนี้จะทำงานเหมือนกับ user
มิเช่นนั้นก็จะทำงานเหมือนกับfullSensor
และอนุญาตให้ใช้การวางแนวหน้าจอได้ 4 แบบ เพิ่มใน API ระดับ 18"locked"
ล็อกการวางแนวตามการหมุนปัจจุบันไม่ว่าจะหมุนอย่างไรก็ตาม เพิ่มใน API ระดับ 18 หมายเหตุ: เมื่อคุณประกาศค่าแนวนอนหรือแนวตั้งค่าใดค่าหนึ่ง ระบบจะถือว่าค่านั้นเป็นข้อกำหนดที่เข้มงวดสำหรับการวางแนวที่กิจกรรมจะทำงาน ค่าที่คุณประกาศจะเปิดใช้การกรองตามบริการต่างๆ เช่น Google Play เพื่อให้แอปพลิเคชันพร้อมให้บริการในอุปกรณ์ที่รองรับการวางแนวที่กิจกรรมของคุณกำหนดเท่านั้น ตัวอย่างเช่น หากคุณประกาศเป็น
"landscape"
,"reverseLandscape"
หรือ"sensorLandscape"
แอปพลิเคชันของคุณจะใช้ได้กับอุปกรณ์ที่รองรับการวางแนวแนวนอนเท่านั้นนอกจากนี้ ให้ประกาศอย่างชัดเจนว่าแอปพลิเคชันของคุณต้องใช้การวางแนวแนวตั้งหรือแนวนอนด้วยองค์ประกอบ
<uses-feature>
เช่น<uses-feature android:name="android.hardware.screen.portrait"/>
นี่เป็นลักษณะการกรองที่ Google Play และบริการอื่นๆ ที่รองรับมอบให้ และแพลตฟอร์มเองไม่ได้ควบคุมว่าแอปจะติดตั้งได้หรือไม่เมื่ออุปกรณ์รองรับการวางแนวบางรูปแบบเท่านั้นandroid:showForAllUsers
-
กิจกรรมจะแสดงหรือไม่เมื่อผู้ใช้ปัจจุบันของอุปกรณ์เป็นคนละคนกับผู้ใช้ที่เปิดกิจกรรม คุณสามารถตั้งค่าแอตทริบิวต์นี้เป็นค่าตัวอักษร เช่น
"true"
หรือ"false"
หรือตั้งค่าแอตทริบิวต์เป็นแอตทริบิวต์ทรัพยากรหรือธีมที่มีค่าบูลีนก็ได้แอตทริบิวต์นี้เพิ่มเข้ามาใน API ระดับ 23
android:stateNotNeeded
- ดูว่ากิจกรรมสิ้นสุดและเริ่มใหม่ได้สําเร็จหรือไม่แม้จะไม่ได้บันทึกสถานะไว้ ค่าจะเป็น
"true"
หากสามารถรีสตาร์ทได้โดยไม่ต้องอ้างอิงถึงสถานะก่อนหน้า และจะเป็น"false"
หากต้องใช้สถานะก่อนหน้า ค่าเริ่มต้นคือ"false"
โดยปกติแล้ว ระบบจะเรียกใช้วิธีของกิจกรรมนั้นๆ ก่อนปิดกิจกรรมชั่วคราวเพื่อประหยัดทรัพยากร
onSaveInstanceState()
เมธอดนี้จะจัดเก็บสถานะปัจจุบันของกิจกรรมไว้ในออบเจ็กต์Bundle
จากนั้นจะส่งไปยังonCreate()
เมื่อกิจกรรมเริ่มทํางานอีกครั้ง หากตั้งค่าแอตทริบิวต์นี้เป็น"true"
ระบบอาจไม่เรียกใช้onSaveInstanceState()
และส่งonCreate()
ไปยังnull
แทนBundle
ดังที่เป็นเมื่อกิจกรรมเริ่มต้นขึ้นเป็นครั้งแรกการตั้งค่า
"true"
หมายความว่าสามารถเริ่มกิจกรรมอีกครั้งได้โดยไม่ต้องเก็บสถานะไว้ ตัวอย่างเช่น กิจกรรมที่แสดงหน้าจอหลักจะใช้การตั้งค่านี้เพื่อให้มั่นใจว่าระบบจะไม่นำกิจกรรมออกหากกิจกรรมขัดข้องด้วยเหตุผลบางอย่าง android:supportsPictureInPicture
-
ระบุว่ากิจกรรมรองรับการแสดง ภาพซ้อนภาพหรือไม่
android:taskAffinity
งานที่เกี่ยวข้องกับกิจกรรม กิจกรรมที่มีความเกี่ยวข้องเดียวกันจะอยู่ใน "แอปพลิเคชัน" เดียวกันจากมุมมองของผู้ใช้ ความสัมพันธ์ของงานจะกำหนดโดยความสัมพันธ์ของกิจกรรมรูท
ความสัมพันธ์จะกําหนด 2 สิ่ง ได้แก่ งานที่กิจกรรมได้รับการจัดทําเป็นรายการหลักใหม่ (ดูแอตทริบิวต์
allowTaskReparenting
) และงานที่เก็บกิจกรรมไว้เมื่อเปิดใช้งานด้วย FlagFLAG_ACTIVITY_NEW_TASK
โดยค่าเริ่มต้น กิจกรรมทั้งหมดในแอปพลิเคชันจะมีความสัมพันธ์เดียวกัน คุณสามารถตั้งค่าแอตทริบิวต์นี้เพื่อจัดกลุ่มแอตทริบิวต์ต่างๆ แยกกัน และวางกิจกรรมที่กําหนดในแอปพลิเคชันต่างๆ ไว้ในงานเดียวกันได้ หากต้องการระบุว่ากิจกรรมไม่มีความเกี่ยวข้องกับงานใด ให้ตั้งค่าเป็นสตริงว่าง
หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ กิจกรรมจะรับค่ากำหนดความเกี่ยวข้องสำหรับแอปพลิเคชัน ดูแอตทริบิวต์
taskAffinity
ของ<application>
องค์ประกอบ ชื่อของความสัมพันธ์เริ่มต้นสําหรับแอปพลิเคชันคือเนมสเปซที่ตั้งค่าไว้ในไฟล์build.gradle
android:theme
- การอ้างอิงทรัพยากรสไตล์ที่กำหนดธีมโดยรวมของกิจกรรม
ซึ่งจะตั้งค่าบริบทของกิจกรรมให้ใช้
theme
นี้โดยอัตโนมัติ และอาจทำให้ภาพเคลื่อนไหว "เริ่มต้น" แสดงขึ้นก่อนที่จะเปิดใช้งานกิจกรรม เพื่อให้ตรงกับลักษณะที่กิจกรรมปรากฏจริงมากขึ้นหากไม่ได้ตั้งค่าแอตทริบิวต์นี้ กิจกรรมจะรับธีมที่กําหนดไว้สําหรับแอปพลิเคชันโดยรวมจากแอตทริบิวต์ของ
<application>
องค์ประกอบtheme
<application>
หากไม่ได้ตั้งค่าแอตทริบิวต์ดังกล่าวด้วย ระบบจะใช้ธีมเริ่มต้นของระบบ ดูข้อมูลเพิ่มเติมได้ที่สไตล์และธีม android:uiOptions
ตัวเลือกเพิ่มเติมสำหรับ UI ของกิจกรรม ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้
ค่า คำอธิบาย "none"
ไม่มีตัวเลือก UI เพิ่มเติม ซึ่งเป็นค่าเริ่มต้น "splitActionBarWhenNarrow"
เพิ่มแถบที่ด้านล่างของหน้าจอเพื่อแสดงรายการการดำเนินการในแถบแอป หรือที่เรียกว่าแถบการดำเนินการ เมื่อมีพื้นที่แนวนอนจำกัด เช่น เมื่ออยู่ในโหมดแนวตั้งบนโทรศัพท์มือถือ แถบแอปจะแบ่งออกเป็นส่วนการนําทางด้านบนและแถบด้านล่างสําหรับรายการการดำเนินการแทนที่จะมีรายการการดำเนินการจํานวนไม่มากปรากฏในแถบแอปที่ด้านบนของหน้าจอ ซึ่งหมายความว่าจะมีพื้นที่เพียงพอสำหรับรายการการดำเนินการ รวมถึงองค์ประกอบการนำทางและชื่อที่ด้านบน รายการเมนูจะไม่แยกกันอยู่ใน 2 แถบ โดยจะปรากฏร่วมกันเสมอ ดูข้อมูลเพิ่มเติมเกี่ยวกับแถบแอปได้ที่เพิ่มแถบแอป
แอตทริบิวต์นี้เพิ่มเข้ามาใน API ระดับ 14
android:windowSoftInputMode
- วิธีที่หน้าต่างหลักของกิจกรรมโต้ตอบกับหน้าต่างที่มีแป้นพิมพ์บนหน้าจอ การตั้งค่าแอตทริบิวต์นี้ส่งผลต่อ 2 อย่างต่อไปนี้
- แป้นพิมพ์เสมือนจะซ่อนหรือแสดงเมื่อกิจกรรมกลายเป็นจุดสนใจของผู้ใช้
- ปรับขนาดหน้าต่างหลักของกิจกรรมให้เล็กลงเพื่อให้มีที่ว่างสำหรับแป้นพิมพ์บนหน้าจอ หรือเลื่อนเนื้อหาเพื่อให้มองเห็นโฟกัสปัจจุบันได้เมื่อแป้นพิมพ์บนหน้าจอบดบังหน้าต่างบางส่วน
การตั้งค่าต้องเป็นค่าใดค่าหนึ่งตามที่ระบุไว้ในตารางต่อไปนี้ หรือเป็นค่า
"state..."
1 ค่าบวกค่า"adjust..."
1 ค่า การตั้งค่าหลายค่าในกลุ่มใดกลุ่มหนึ่ง เช่น ค่า"state..."
หลายค่า จะให้ผลลัพธ์ที่ไม่ชัดเจน ค่าแต่ละค่าจะคั่นด้วยแท่งแนวตั้ง (|
) ดังที่แสดงในตัวอย่างต่อไปนี้<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >
ค่าที่ตั้งไว้ที่นี่ (นอกเหนือจาก
"stateUnspecified"
และ"adjustUnspecified"
) จะลบล้างค่าที่ตั้งไว้ในธีมค่า คำอธิบาย "stateUnspecified"
ไม่ได้ระบุสถานะว่าแป้นพิมพ์เสมือนซ่อนอยู่หรือแสดงอยู่ ระบบจะเลือกสถานะที่เหมาะสมหรือใช้การตั้งค่าในธีม การตั้งค่านี้เป็นค่าเริ่มต้นสำหรับลักษณะการทำงานของแป้นพิมพ์บนหน้าจอ
"stateUnchanged"
แป้นพิมพ์เสมือนจะยังคงอยู่ในสถานะเดิม ไม่ว่าจะเป็นการแสดงหรือซ่อนอยู่ เมื่อกิจกรรมปรากฏขึ้น "stateHidden"
แป้นพิมพ์บนหน้าจอจะซ่อนอยู่เมื่อผู้ใช้เลือกกิจกรรม กล่าวคือ เมื่อผู้ใช้ไปยังกิจกรรมนั้นๆ แทนที่จะย้อนกลับเมื่อออกจากกิจกรรมอื่น "stateAlwaysHidden"
แป้นพิมพ์บนหน้าจอจะซ่อนอยู่เสมอเมื่อหน้าต่างหลักของกิจกรรมมีโฟกัสการป้อนข้อมูล "stateVisible"
แป้นพิมพ์บนหน้าจอจะปรากฏขึ้นเมื่อผู้ใช้เลือกกิจกรรม กล่าวคือเมื่อผู้ใช้ไปยังกิจกรรมนั้นๆ แทนที่จะย้อนกลับเมื่อออกจากกิจกรรมอื่น "stateAlwaysVisible"
แป้นพิมพ์บนหน้าจอจะปรากฏขึ้นเมื่อหน้าต่างได้รับโฟกัสการป้อนข้อมูล "adjustUnspecified"
ไม่ได้ระบุไว้ว่าหน้าต่างหลักของกิจกรรมจะปรับขนาดเพื่อเพิ่มพื้นที่สำหรับแป้นพิมพ์บนหน้าจอหรือเนื้อหาของหน้าต่างจะเลื่อนเพื่อให้โฟกัสปัจจุบันปรากฏบนหน้าจอ ระบบจะเลือกโหมดใดโหมดหนึ่งโดยอัตโนมัติ โดยขึ้นอยู่กับว่าเนื้อหาของหน้าต่างมีมุมมองเลย์เอาต์ที่เลื่อนเนื้อหาได้หรือไม่ หากมีมุมมองดังกล่าว หน้าต่างจะปรับขนาดโดยสมมติว่าการเลื่อนจะทำให้เนื้อหาทั้งหมดของหน้าต่างปรากฏขึ้นในพื้นที่ที่เล็กลง การตั้งค่านี้เป็นค่าเริ่มต้นสำหรับลักษณะการทำงานของหน้าต่างหลัก
"adjustResize"
ระบบจะปรับขนาดหน้าต่างหลักของกิจกรรมเสมอเพื่อให้มีพื้นที่สำหรับแป้นพิมพ์บนหน้าจอ "adjustPan"
ระบบจะไม่ปรับขนาดหน้าต่างหลักของกิจกรรมเพื่อให้มีพื้นที่สำหรับแป้นพิมพ์เสมือน แต่เนื้อหาในหน้าต่างจะเลื่อนโดยอัตโนมัติเพื่อให้แป้นพิมพ์ไม่บดบังโฟกัสปัจจุบัน และผู้ใช้จะเห็นสิ่งที่พิมพ์อยู่เสมอ โดยทั่วไปแล้ว ตัวเลือกนี้ไม่น่าใช้มากกว่าการปรับขนาด เนื่องจากผู้ใช้อาจต้องปิดแป้นพิมพ์บนหน้าจอเพื่อเข้าถึงและโต้ตอบกับส่วนที่บดบังของหน้าต่าง "adjustNothing"
ระบบจะไม่ปรับขนาดหรือเลื่อนหน้าต่างหลักของกิจกรรมเพื่อให้มีพื้นที่สำหรับแป้นพิมพ์บนหน้าจอ กิจกรรมมีหน้าที่รับผิดชอบในการหาพื้นที่สำหรับแป้นพิมพ์เสมือนโดยใช้ส่วนแทรกของหน้าต่าง สําหรับกิจกรรมที่จัดการส่วนแทรกของหน้าต่างอย่างถูกต้อง ตัวเลือกนี้จะให้คุณควบคุมวิธีแสดงเนื้อหาของหน้าต่างบนหน้าจอได้มากที่สุด แอตทริบิวต์นี้เปิดตัวใน API ระดับ 3
- เปิดตัวใน
- API ระดับ 1 สำหรับแอตทริบิวต์ทั้งหมดยกเว้น
noHistory
และwindowSoftInputMode
ซึ่งเพิ่มใน API ระดับ 3 - ดูข้อมูลเพิ่มเติมได้ที่
<application>
<activity-alias>
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-01-14 UTC
[null,null,["อัปเดตล่าสุด 2025-01-14 UTC"],[],[]]