- ไวยากรณ์:
<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:enableOnBackInvokedCallback=["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:minAspectRatio="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><property>- คำอธิบาย:
- ประกาศกิจกรรม (
Activityคลาสย่อย) ที่ ใช้ส่วนหนึ่งของอินเทอร์เฟซผู้ใช้แบบภาพของแอปพลิเคชัน กิจกรรมทั้งหมด ต้องแสดงด้วยองค์ประกอบ<activity>ในไฟล์ Manifest หากไม่ได้ประกาศไว้ที่นั่น ระบบจะไม่เห็นและจะไม่เรียกใช้ - แอตทริบิวต์
android:allowEmbedded-
ระบุว่าสามารถเปิดกิจกรรมเป็นกิจกรรมย่อยที่ฝังไว้ของกิจกรรมอื่นได้ โดยเฉพาะในกรณีที่กิจกรรมย่อยอยู่ในคอนเทนเนอร์ เช่น คอนเทนเนอร์ที่
Displayกิจกรรมอื่นเป็นเจ้าของ เช่น กิจกรรม ที่ใช้สําหรับการแจ้งเตือนที่กําหนดเองของ Wear จะประกาศ เพื่อให้ Wear แสดงกิจกรรมในสตรีมบริบท ซึ่งอยู่ใน กระบวนการอื่นค่าเริ่มต้นของแอตทริบิวต์นี้คือ
false android:allowTaskReparenting- ไม่ว่ากิจกรรมจะย้ายจากงานที่เริ่มต้นไปยัง
งานที่มีความเกี่ยวข้องได้หรือไม่เมื่อมีการนำงานนั้นมาไว้ที่
ด้านหน้า
"true"หากย้ายได้ และ"false"หากยังคงอยู่กับงานที่เริ่มต้นหากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ค่าที่ตั้งโดยแอตทริบิวต์
allowTaskReparentingที่เกี่ยวข้องขององค์ประกอบ<application>จะมีผลกับกิจกรรม ค่าเริ่มต้นคือ"false"โดยปกติแล้ว เมื่อมีการเริ่มกิจกรรม ระบบจะเชื่อมโยงกิจกรรมนั้นกับงานของ กิจกรรมที่เริ่มกิจกรรมนั้น และกิจกรรมจะยังคงอยู่ที่นั่นตลอดอายุการใช้งาน คุณใช้แอตทริบิวต์นี้เพื่อบังคับให้ระบบเปลี่ยนงานหลักเป็นงานที่แอป มีความเกี่ยวข้องเมื่อไม่มีการแสดงงานปัจจุบันอีกต่อไป โดยปกติแล้ว จะใช้เพื่อทําให้กิจกรรมของแอปพลิเคชันย้ายไป ยังงานหลักที่เชื่อมโยงกับแอปพลิเคชันนั้น
ตัวอย่างเช่น หากข้อความอีเมลมีลิงก์ไปยังหน้าเว็บ การคลิกลิงก์จะแสดงกิจกรรมที่แสดงหน้าเว็บได้ กิจกรรมดังกล่าว กำหนดโดยแอปพลิเคชันเบราว์เซอร์ แต่จะเปิดขึ้นเป็นส่วนหนึ่งของงานอีเมล หากมีการเปลี่ยนงานหลักเป็นงานของเบราว์เซอร์ งานจะแสดงเมื่อเบราว์เซอร์ มาอยู่ด้านหน้าในครั้งถัดไป และจะไม่แสดงเมื่องานของอีเมล กลับมาอยู่ด้านหน้าอีกครั้ง
ความสัมพันธ์ของกิจกรรมกำหนดโดยแอตทริบิวต์
taskAffinityความสัมพันธ์ ของงานจะกำหนดโดยการอ่านความสัมพันธ์ของกิจกรรมรูท ดังนั้น ตามคำจำกัดความแล้ว กิจกรรมรูทจะอยู่ในงานที่มี Affinity เดียวกันเสมอ เนื่องจากกิจกรรมที่มีโหมดการเปิดตัว"singleTask"หรือ"singleInstance"จะอยู่ที่รูทของงานได้เท่านั้น การเปลี่ยนงานหลักจึงจำกัดไว้ที่โหมด"standard"และ"singleTop"(ดูแอตทริบิวต์launchModeด้วย) android:alwaysRetainTaskState- ไม่ว่าระบบจะรักษาสถานะของงานที่กิจกรรมอยู่เสมอหรือไม่
"true"และ"false"หากระบบรีเซ็ตงานเป็นสถานะเริ่มต้นได้ในบางกรณี ค่าเริ่มต้นคือ"false"แอตทริบิวต์นี้มีความหมายเฉพาะกิจกรรมรูทของงานเท่านั้น ระบบจะไม่สนใจ สำหรับกิจกรรมอื่นๆ ทั้งหมดโดยปกติแล้ว ระบบจะล้างงานและนำกิจกรรมทั้งหมดออกจากสแต็ก เหนือกิจกรรมรูทในบางสถานการณ์เมื่อผู้ใช้เลือกงานนั้นอีกครั้งจากหน้าจอหลัก โดยปกติแล้ว ระบบจะดำเนินการนี้หากผู้ใช้ไม่ได้เข้าชม งานเป็นระยะเวลาหนึ่ง เช่น 30 นาที
อย่างไรก็ตาม เมื่อแอตทริบิวต์นี้เป็น
"true"ผู้ใช้จะกลับมาทำงานในสถานะล่าสุดเสมอ ไม่ว่าผู้ใช้จะไปที่งานนั้นด้วยวิธีใดก็ตาม ซึ่งมีประโยชน์ในแอปพลิเคชันอย่างเว็บเบราว์เซอร์ที่มีสถานะจำนวนมาก เช่น แท็บที่เปิดอยู่หลายแท็บ ซึ่งผู้ใช้ไม่ต้องการให้หายไป android:autoRemoveFromRecents- ไม่ว่างานที่เปิดโดยกิจกรรมที่มีแอตทริบิวต์นี้จะยังคงอยู่ในหน้าจอรายการล่าสุดจนกว่ากิจกรรมสุดท้ายใน
งานจะเสร็จสมบูรณ์ หาก
trueระบบจะนำงานออกจากหน้าจอ "ล่าสุด" โดยอัตโนมัติ การดำเนินการนี้จะลบล้างการใช้FLAG_ACTIVITY_RETAIN_IN_RECENTSของผู้โทร ต้องเป็นค่าบูลีน ซึ่งอาจเป็น"true"หรือ"false" android:banner- ทรัพยากร Drawable
ซึ่งมีแบนเนอร์กราฟิกแบบขยายสำหรับสินค้าที่เชื่อมโยง ใช้กับแท็ก
<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 โดยปกติแล้ว ผู้ใช้จะเห็นกิจกรรม Q เนื่องจากเป็นกิจกรรมล่าสุดที่ผู้ใช้ทำในงานของ P อย่างไรก็ตาม หาก P ตั้งค่าสถานะนี้เป็น
"true"ระบบจะนำกิจกรรมทั้งหมดที่อยู่ด้านบนออก (ในกรณีนี้คือ Q) เมื่อผู้ใช้เปิดกิจกรรม P จากหน้าจอหลัก ดังนั้น ผู้ใช้จะเห็นเฉพาะ P เมื่อกลับมาทำงานหากแอตทริบิวต์นี้และ
allowTaskReparentingเป็น"true"ทั้งคู่ ระบบจะย้ายกิจกรรมที่เปลี่ยนงานหลักได้ไปยัง งานที่มีความคล้ายคลึงกัน จากนั้นระบบจะทิ้งกิจกรรมที่เหลือระบบจะละเว้นแอตทริบิวต์นี้หากไม่ได้ตั้งค่า
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED android:colorModeระบุโหมดสีของกิจกรรม หากระบุ จะเป็น
hdrหรือwideColorGamutก็ได้หาก
hdrขอให้แสดงกิจกรรมใน High Dynamic Range หากอุปกรณ์รองรับหาก
wideColorGamut, ขอให้แสดงกิจกรรมในโหมดขอบเขตสีที่กว้าง ในอุปกรณ์ที่เข้ากันได้ ในโหมดช่วงสีแบบกว้าง หน้าต่างจะแสดงผลนอกช่วงสีSRGBเพื่อแสดงสีที่สดใสยิ่งขึ้นได้ หากอุปกรณ์ไม่รองรับการแสดงผลช่วงสีแบบกว้าง แอตทริบิวต์นี้จะไม่มีผล ดูข้อมูลเพิ่มเติมเกี่ยวกับการแสดงผลในโหมด Wide Color ได้ที่ ปรับปรุงกราฟิกด้วยเนื้อหา Wide Colorandroid: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"การเปลี่ยนแปลงรหัสระบุเครือข่ายมือถือ (MNC) ของ IMSI เมื่อตรวจพบซิมที่อัปเดต 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กิจกรรมเป็นการรับรู้การบูตโดยตรงหรือไม่ นั่นคือ สามารถเรียกใช้ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์ได้หรือไม่
หมายเหตุ: ในระหว่างDirect Boot กิจกรรมในแอปพลิเคชันจะเข้าถึงได้เฉพาะข้อมูลที่จัดเก็บไว้ในที่เก็บข้อมูลที่อุปกรณ์ป้องกัน
ค่าเริ่มต้นคือ
"false"android:documentLaunchMode- ระบุวิธีเพิ่มอินสแตนซ์ใหม่ของกิจกรรมลงในงานทุกครั้งที่เปิดใช้
แอตทริบิวต์นี้อนุญาตให้ผู้ใช้มีเอกสารหลายรายการจากแอปพลิเคชันเดียวกันปรากฏในหน้าจอ "ล่าสุด"
แอตทริบิวต์นี้มี 4 ค่า ซึ่งจะทำให้เกิดผลต่อไปนี้เมื่อผู้ใช้เปิดเอกสาร ด้วยแอปพลิเคชัน
ค่า คำอธิบาย "intoExisting"ระบบจะค้นหางานที่มี ComponentNameของ Intent ฐานและ URI ของข้อมูล ตรงกับของ Intent ที่เปิด หากระบบพบงานดังกล่าว ระบบจะล้างงานและรีสตาร์ท โดยกิจกรรมรูทจะได้รับการเรียกไปยังonNewIntent(android.content.Intent)หากระบบไม่พบงานดังกล่าว ระบบจะสร้างงานใหม่"always"กิจกรรมนี้จะสร้างงานใหม่สำหรับเอกสาร แม้ว่าจะเปิดเอกสารอยู่แล้วก็ตาม ซึ่งเหมือนกับการตั้งค่าทั้งแฟล็ก FLAG_ACTIVITY_NEW_DOCUMENTและFLAG_ACTIVITY_MULTIPLE_TASK"none"กิจกรรมจะไม่สร้างงานใหม่สำหรับกิจกรรม ค่านี้เป็นค่าเริ่มต้น ซึ่งจะสร้างงานใหม่ก็ต่อเมื่อตั้งค่า FLAG_ACTIVITY_NEW_TASKเท่านั้น หน้าจอ "ล่าสุด" จะถือว่ากิจกรรมเป็นค่าเริ่มต้น นั่นคือจะแสดงงานเดียวสำหรับ แอป ซึ่งจะกลับมาทำงานต่อจากกิจกรรมล่าสุดที่ผู้ใช้เรียกใช้"never"ระบบจะไม่เปิดกิจกรรมในเอกสารใหม่แม้ว่า Intent จะมี FLAG_ACTIVITY_NEW_DOCUMENTการตั้งค่านี้จะลบล้างลักษณะการทำงานของFLAG_ACTIVITY_NEW_DOCUMENTและFLAG_ACTIVITY_MULTIPLE_TASKหากมีการตั้งค่าใดค่าหนึ่งใน กิจกรรม และหน้าจอ "ล่าสุด" จะแสดงงานเดียวสำหรับแอป ซึ่งจะกลับมาทำงานต่อจาก กิจกรรมใดก็ตามที่ผู้ใช้เรียกใช้ล่าสุดหมายเหตุ: สำหรับค่าอื่นๆ นอกเหนือจาก
"none"และ"never"กิจกรรมจะกำหนดด้วยlaunchMode="standard"หากไม่ได้ระบุแอตทริบิวต์นี้ ระบบจะใช้documentLaunchMode="none" android:enabled- ระบบจะสร้างอินสแตนซ์ของกิจกรรมได้หรือไม่ โดยจะ
"true"หากทำได้ และ"false"หากทำไม่ได้ ค่าเริ่มต้น คือ"true"องค์ประกอบ
<application>มีแอตทริบิวต์enabledของตัวเองซึ่งใช้กับคอมโพเนนต์ของแอปพลิเคชันทั้งหมด รวมถึงกิจกรรมต่างๆ แอตทริบิวต์<application>และ<activity>ต้องเป็น"true"ทั้งคู่ เนื่องจากทั้ง 2 รายการ เป็นค่าเริ่มต้นเพื่อให้ระบบสร้างอินสแตนซ์ของกิจกรรมได้ หากเป็น"false"จะสร้างอินสแตนซ์ไม่ได้ android:enableOnBackInvokedCallbackโดยแฟล็กนี้จะช่วยให้คุณเลือกไม่ใช้ภาพเคลื่อนไหวของระบบแบบคาดการณ์ได้ที่ระดับกิจกรรม
ตั้งค่า
android:enableOnBackInvokedCallback=falseเพื่อปิดภาพเคลื่อนไหวของการย้อนกลับที่คาดการณ์ได้ที่ระดับกิจกรรม และสั่งให้ระบบไม่สนใจการเรียกใช้ API ของแพลตฟอร์มOnBackInvokedCallbackandroid:excludeFromRecentsไม่ว่าจะยกเว้นงานที่เริ่มต้นโดยกิจกรรมนี้จาก หน้าจอ "ล่าสุด" หรือไม่ กล่าวคือ เมื่อกิจกรรมนี้เป็นกิจกรรมรูทของงานใหม่ แอตทริบิวต์นี้จะกำหนดว่างานจะปรากฏในรายการแอปที่ใช้ล่าสุดหรือไม่
"true"หากยกเว้นงานออกจากรายการ"false"หากรวมงานไว้ ค่าเริ่มต้นคือ"false"android:exportedไม่ว่าจะเปิดกิจกรรมได้โดยคอมโพเนนต์ของแอปพลิเคชันอื่นๆ หรือไม่
- หากเป็น
"true"แอปใดก็ได้จะเข้าถึงกิจกรรมได้ และจะเปิดใช้ได้ด้วยชื่อคลาสที่แน่นอน - หากเป็น
"false"จะเปิดใช้งานกิจกรรมได้เฉพาะคอมโพเนนต์ของ แอปพลิเคชันเดียวกัน แอปพลิเคชันที่มี User-ID เดียวกัน หรือคอมโพเนนต์ของระบบที่มีสิทธิ์ ค่านี้เป็นค่าเริ่มต้นเมื่อไม่มีตัวกรอง Intent
หากกิจกรรมในแอปมีตัวกรอง Intent ให้ตั้งค่าองค์ประกอบนี้เป็น
"true"เพื่อให้แอปอื่นๆ เริ่มกิจกรรมได้ เช่น หากกิจกรรมเป็นกิจกรรมหลัก ของแอปและมีcategoryandroid.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 และ Camera
ซึ่งจะส่งผลให้ภาพเคลื่อนไหวและการเลื่อนราบรื่นขึ้น รวมถึงการตอบสนองโดยรวมดีขึ้น แม้แต่สำหรับแอปพลิเคชันที่ไม่ได้ใช้ไลบรารี OpenGL ของเฟรมเวิร์กอย่างชัดแจ้ง เนื่องจากต้องใช้ทรัพยากรเพิ่มขึ้นเพื่อเปิดใช้การเร่งด้วยฮาร์ดแวร์ แอปจึงใช้ RAM มากขึ้น
การดำเนินการ 2 มิติของ OpenGL บางอย่างอาจไม่ได้รับการเร่งความเร็ว หากเปิดใช้ตัวแสดงผลที่เร่งด้วยฮาร์ดแวร์ ให้ทดสอบว่าแอปพลิเคชันใช้ตัวแสดงผลได้โดยไม่มีข้อผิดพลาดหรือไม่
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_ACTIVITY_*ค่าคงที่) ในออบเจ็กต์Intentเพื่อกำหนดสิ่งที่เกิดขึ้นเมื่อ มีการเรียกใช้กิจกรรมเพื่อจัดการ Intent"standard""singleTop""singleTask""singleInstance""singleInstancePerTask"โหมดเริ่มต้นคือ
"standard"ดังที่แสดงในตารางต่อไปนี้ โหมดต่างๆ จะแบ่งออกเป็น 2 กลุ่มหลัก โดยมีกิจกรรม
"standard"และ"singleTop"อยู่ด้านหนึ่ง และกิจกรรม"singleTask","singleInstance"และ"singleInstancePerTask"อยู่อีกด้านหนึ่ง กิจกรรมที่มี"standard"หรือ"singleTop"โหมดเปิดใช้งาน สามารถสร้างอินสแตนซ์ได้หลายครั้งอินสแตนซ์อาจเป็นของงานใดก็ได้ และอาจอยู่ในส่วนใดก็ได้ของงานกิจกรรม โดยปกติแล้ว ระบบจะเปิด
startActivity()ในงานที่เรียกใช้Intentเว้นแต่ว่าออบเจ็กต์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 นั้น แต่ละอินสแตนซ์จะจัดการเจตนาเดียว ในทำนองเดียวกัน คุณยังสร้างอินสแตนซ์ใหม่ของกิจกรรม"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ได้ที่งานและ Back Stackandroid:lockTaskMode- กำหนดวิธีที่ระบบนำเสนอกิจกรรมนี้เมื่ออุปกรณ์ทำงานใน
โหมดล็อกงาน
Android สามารถเรียกใช้งานในลักษณะที่เหมือนคีออสก์และสมจริงที่เรียกว่าโหมดล็อกงาน เมื่อระบบ ทำงานในโหมดล็อกงาน โดยปกติแล้วผู้ใช้อุปกรณ์จะดูการแจ้งเตือน เข้าถึงแอปที่ไม่ได้อยู่ในรายการที่อนุญาต หรือกลับไปที่หน้าจอหลักไม่ได้ เว้นแต่แอป Home จะอยู่ในรายการที่อนุญาต
เฉพาะแอปที่ได้รับการ อนุญาตจากเครื่องมือควบคุมนโยบายด้านอุปกรณ์ (DPC) เท่านั้นที่จะเรียกใช้ได้เมื่อระบบอยู่ในโหมดล็อกงาน อย่างไรก็ตาม แอปของระบบและแอปที่มีสิทธิ์จะทำงานในโหมดล็อกงานได้โดยไม่ต้องอยู่ในรายการที่อนุญาต
ค่าอาจเป็นค่าสตริงใดค่าหนึ่งต่อไปนี้
R.attr.lockTaskModeค่า คำอธิบาย "normal"ค่าเริ่มต้น นี่เป็นค่าเริ่มต้น Tasks จะไม่เปิดตัวในโหมดล็อกงาน แต่สามารถ วางไว้ที่นั่นได้โดยการเรียก startLockTask()"never"ระบบจะไม่เปิดใช้ฟีเจอร์
lockTaskสำหรับงาน และผู้ใช้อุปกรณ์จะปักหมุดงานเหล่านี้จากหน้าจอ ล่าสุดไม่ได้หมายเหตุ: โหมดนี้ใช้ได้กับแอปพลิเคชันของระบบและแอปพลิเคชันที่มีสิทธิ์เท่านั้น ระบบจะถือว่าแอปที่ไม่มีสิทธิ์ซึ่งมีค่านี้เป็น
normal"if_whitelisted"หาก DPC อนุญาตแพ็กเกจนี้โดยใช้ DevicePolicyManager.setLockTaskPackages()โหมดนี้จะเหมือนกับalwaysทุกประการ ยกเว้นว่ากิจกรรมต้องเรียกใช้stopLockTask()ก่อนจึงจะ เสร็จสิ้นได้หากเป็นงานสุดท้ายที่ล็อกไว้ หาก DPC ไม่อนุญาตแพ็กเกจนี้ โหมดนี้จะเหมือนกับnormal"always"งานที่เริ่มต้นจากกิจกรรมนี้จะเปิดในโหมดล็อกงานเสมอ หากระบบอยู่ในโหมดล็อกงานอยู่แล้วเมื่อเปิดใช้งานงานนี้ ระบบจะเปิดใช้งานงานใหม่ทับงานปัจจุบัน งานที่เปิดในโหมดนี้จะออกจากโหมดล็อกงานได้โดยการเรียกใช้
finish()หมายเหตุ: โหมดนี้ใช้ได้กับแอปพลิเคชันของระบบและแอปพลิเคชันที่มีสิทธิ์เท่านั้น ระบบจะถือว่าแอปที่ไม่มีสิทธิ์ซึ่งมีค่านี้เป็น
normalแอตทริบิวต์นี้เปิดตัวในระดับ API 23
android:maxRecents- จำนวนงานสูงสุดที่เริ่มต้นจากกิจกรรมนี้ใน หน้าจอ "ล่าสุด" เมื่อถึงจำนวนรายการนี้ ระบบจะนำอินสแตนซ์ที่ใช้ล่าสุด น้อยที่สุดออกจากหน้าจอ "ล่าสุด" ค่าที่ใช้ได้คือจำนวนเต็มตั้งแต่ 1 ถึง 50 หรือ 1 ถึง 25 ในอุปกรณ์ที่มีหน่วยความจำต่ำ 0 ไม่ถูกต้อง ค่าเริ่มต้นคือ 16
android:maxAspectRatio-
สัดส่วนภาพสูงสุดที่กิจกรรมรองรับ
หากแอปทำงานบนอุปกรณ์ที่มีสัดส่วนภาพกว้างขึ้น ระบบจะใส่แถบดำด้านบนและด้านล่างของแอปโดยอัตโนมัติ โดยปล่อยให้บางส่วนของหน้าจอไม่ได้ใช้งานเพื่อให้แอปทำงานที่สัดส่วนภาพสูงสุดที่ระบุได้
สัดส่วนภาพสูงสุดจะแสดงในรูปแบบทศนิยมของผลหารของด้านที่ยาวกว่าของอุปกรณ์ หารด้วยด้านที่สั้นกว่า เช่น หากสัดส่วนภาพสูงสุดคือ 7:3 ให้ตั้งค่าของแอตทริบิวต์นี้เป็น 2.33
ในอุปกรณ์ที่ไม่ใช่แบบสวมใส่ ค่าของแอตทริบิวต์นี้ต้องเป็น 1.33 ขึ้นไป ในอุปกรณ์ที่สวมใส่ได้ ค่านี้ต้องเป็น 1.0 ขึ้นไป ไม่เช่นนั้น ระบบจะไม่สนใจค่าที่ ตั้งไว้
ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์นี้ได้ที่ R.attr.maxAspectRatio
android:minAspectRatio-
อัตราส่วนภาพขั้นต่ำที่กิจกรรมรองรับ
หากแอปทำงานบนอุปกรณ์ที่มีสัดส่วนภาพแคบกว่า ระบบจะใส่แถบดำด้านบนและด้านล่างของแอปโดยอัตโนมัติ เพื่อให้มีพื้นที่บางส่วนของหน้าจอที่ไม่ได้ใช้งานเพื่อให้แอปทำงานได้ตามสัดส่วนภาพขั้นต่ำที่ระบุ
อัตราส่วนภาพขั้นต่ำแสดงในรูปแบบทศนิยมของผลหารของด้านที่ยาวกว่าของอุปกรณ์หารด้วย ด้านที่สั้นกว่า เช่น หากสัดส่วนภาพของโฆษณา Display คือ 4:3 ให้ตั้งค่าสัดส่วนภาพขั้นต่ำเป็น 1.33
ค่าต้องมากกว่าหรือเท่ากับ 1.0 ไม่เช่นนั้นระบบจะไม่สนใจค่าที่ตั้งไว้
ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์นี้ได้ที่ R.attr.minAspectRatio
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- ชื่อคลาสของตรรกะหลักของกิจกรรม ชื่อที่นี่ต้องตรงกับชื่อคลาส
ที่กำหนดให้กับ
<activity>องค์ประกอบที่เกี่ยวข้องandroid:nameแอตทริบิวต์ระบบจะอ่านแอตทริบิวต์นี้เพื่อพิจารณาว่าจะเริ่มกิจกรรมใดเมื่อ ผู้ใช้แตะปุ่มขึ้นในแถบการดำเนินการ นอกจากนี้ ระบบยังใช้ข้อมูลนี้เพื่อ สังเคราะห์ Back Stack ของกิจกรรมด้วย
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ระบบจะเก็บรักษากิจกรรมรูทไว้เท่านั้น ไม่เช่นนั้น ระบบจะตรวจสอบกิจกรรมที่อยู่สูงกว่าในBack Stackของงาน และจะเก็บกิจกรรมใดก็ตามที่ตั้งค่าแอตทริบิวต์นี้เป็นpersistAcrossRebootsหากใช้แอตทริบิวต์นี้ คุณต้องตั้งค่าเป็นค่าใดค่าหนึ่งต่อไปนี้
ค่า คำอธิบาย persistRootOnlyค่าเริ่มต้น เมื่อระบบรีสตาร์ท ระบบจะ เก็บรักษางานกิจกรรมไว้ แต่จะใช้เฉพาะ Intent การเปิดใช้ของกิจกรรมรูทเท่านั้น
เมื่อ Intent ในการเปิดแอปโหลดกิจกรรมรากของแอป กิจกรรมจะไม่ได้รับออบเจ็กต์
PersistableBundleดังนั้น อย่าใช้onSaveInstanceState()เพื่อรักษาสถานะของกิจกรรมรูทของแอปเมื่ออุปกรณ์ รีสตาร์ทหมายเหตุ: ค่าแอตทริบิวต์นี้จะส่งผลต่อลักษณะการทำงานของแอป ก็ต่อเมื่อมีการตั้งค่าในกิจกรรมรูทของแอปเท่านั้น
persistAcrossRebootsระบบจะรักษาสถานะของกิจกรรมนี้ไว้พร้อมกับสถานะของแต่ละกิจกรรมที่อยู่สูงกว่าในสแต็กย้อนกลับซึ่งมีแอตทริบิวต์
persistableModeของตัวเองที่ตั้งค่าเป็นpersistAcrossRebootsหากกิจกรรมไม่มีแอตทริบิวต์persistableModeที่ตั้งค่าเป็นpersistAcrossRebootsหรือหากเปิดใช้โดยใช้แฟล็กIntent.FLAG_ACTIVITY_NEW_DOCUMENTระบบจะไม่เก็บรักษากิจกรรมนั้น รวมถึงกิจกรรมทั้งหมดที่อยู่สูงกว่าใน Back Stackเมื่อ 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"ไม่ได้เป็นการรับประกันว่าจะไม่มี แอปอื่นๆ ในโหมดหลายหน้าต่างที่มองเห็นได้บนหน้าจอ เช่น ในการแสดงภาพซ้อนภาพ หรือ บนจอแสดงผลอื่นๆ ดังนั้น การตั้งค่าสถานะนี้ไม่ได้หมายความว่าแอปของคุณ มีสิทธิ์เข้าถึงทรัพยากรแบบพิเศษหากแอปกำหนดเป้าหมายเป็น API ระดับ 24 ขึ้นไปและคุณไม่ได้ระบุค่า สำหรับแอตทริบิวต์นี้ ค่าเริ่มต้นของแอตทริบิวต์จะเป็น
"true"หากแอปกำหนดเป้าหมายเป็น API ระดับ 31 ขึ้นไป แอตทริบิวต์นี้จะทำงานแตกต่างกันในหน้าจอขนาดเล็กและขนาดใหญ่ ดังนี้
- หน้าจอขนาดใหญ่ (sw >= 600dp): แอปทั้งหมดรองรับโหมดหลายหน้าต่าง แอตทริบิวต์ระบุ
ว่าแอปปรับขนาดได้หรือไม่ ไม่ใช่ว่าแอปนั้นรองรับโหมดหลายหน้าต่างหรือไม่ หาก
resizeableActivity="false"แอปจะเข้าสู่โหมดความเข้ากันได้เมื่อจำเป็น เพื่อให้สอดคล้องกับขนาดการแสดงผล - หน้าจอขนาดเล็ก (sw < 600dp): หาก
resizeableActivity="true"และความกว้างขั้นต่ำและความสูงขั้นต่ำของกิจกรรมเป็นไปตามข้อกำหนดของโหมดหลายหน้าต่าง แอปจะรองรับโหมดหลายหน้าต่าง หากเป็นresizeableActivity="false"แอปจะไม่รองรับโหมดหลายหน้าต่างไม่ว่ากิจกรรมจะมีขนาดความกว้างและความสูงขั้นต่ำเท่าใดก็ตาม
ค่ากิจกรรมรูทของงานจะมีผลกับกิจกรรมเพิ่มเติมทั้งหมดที่เปิดตัวในงาน กล่าวคือ หากกิจกรรมรูทของงานปรับขนาดได้ ระบบจะถือว่ากิจกรรมอื่นๆ ทั้งหมดในงานนั้นปรับขนาดได้ หากกิจกรรมรูท ปรับขนาดไม่ได้ กิจกรรมอื่นๆ ในงานก็จะปรับขนาดไม่ได้เช่นกัน
หมายเหตุ: ระบบจะใช้ค่ากิจกรรมรูทของงานกับกิจกรรมเพิ่มเติมทั้งหมดที่เปิดในงาน กล่าวคือ หากกิจกรรมรูทของ งานปรับขนาดได้ ระบบจะถือว่ากิจกรรมอื่นๆ ทั้งหมดใน งานนั้นปรับขนาดได้ หากกิจกรรมรูทปรับขนาดไม่ได้ กิจกรรมอื่นๆ ในงานก็จะปรับขนาดไม่ได้เช่นกัน
- หน้าจอขนาดใหญ่ (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งานที่กิจกรรมมีความเกี่ยวข้อง กิจกรรมที่มีความคล้ายคลึงกันในเชิงแนวคิดจะอยู่ในงานเดียวกัน ซึ่งเป็น "แอปพลิเคชัน" เดียวกันจากมุมมองของผู้ใช้ ความสัมพันธ์ของงาน จะกำหนดโดยความสัมพันธ์ของกิจกรรมรูท
Affinity จะกำหนด 2 สิ่ง ได้แก่ งานที่กิจกรรมได้รับการเปลี่ยนงานหลัก (ดูแอตทริบิวต์
allowTaskReparenting) และงานที่โฮสต์กิจกรรมเมื่อเปิดตัว ด้วยแฟล็กFLAG_ACTIVITY_NEW_TASKโดยค่าเริ่มต้น กิจกรรมทั้งหมดในแอปพลิเคชันจะมีแอฟฟินิตีเดียวกัน คุณ ตั้งค่าแอตทริบิวต์นี้เพื่อจัดกลุ่มกิจกรรมต่างๆ ในลักษณะที่แตกต่างกันได้ และยังวาง กิจกรรมที่กำหนดไว้ในแอปพลิเคชันต่างๆ ภายในงานเดียวกันได้ด้วย หากต้องการ ระบุว่ากิจกรรมไม่มีความเกี่ยวข้องกับงานใด ให้ตั้งค่า เป็นสตริงว่าง
หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ กิจกรรมจะรับค่าความสัมพันธ์ที่ตั้งไว้ สำหรับแอปพลิเคชัน ดูแอตทริบิวต์
<application>ขององค์ประกอบtaskAffinityชื่อของความสัมพันธ์เริ่มต้นสำหรับแอปพลิเคชันคือเนมสเปซที่ตั้งค่าไว้ในไฟล์build.gradleandroid:theme- การอ้างอิงถึงทรัพยากรสไตล์ที่กำหนดธีมโดยรวมสำหรับกิจกรรม
ซึ่งจะตั้งค่าบริบทของกิจกรรมให้ใช้
themeโดยอัตโนมัติ และอาจทำให้เกิดภาพเคลื่อนไหว "เริ่มต้น" ก่อนที่จะเปิดตัวกิจกรรม เพื่อให้ตรงกับลักษณะที่กิจกรรมเป็นจริงมากขึ้นหากไม่ได้ตั้งค่าแอตทริบิวต์นี้ กิจกรรมจะรับค่าธีมที่ตั้งไว้สำหรับ แอปพลิเคชันโดยรวมจากแอตทริบิวต์
<application>ขององค์ประกอบthemeหากไม่ได้ตั้งค่าแอตทริบิวต์นั้นด้วย ระบบจะใช้ธีมเริ่มต้นของระบบ ดูข้อมูลเพิ่มเติมได้ที่สไตล์และธีม 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 และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2026-07-01 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2026-07-01 UTC"],[],[]]