Jetpack Compose สำหรับ XR

สร้างเลย์เอาต์ UI แบบพื้นที่อย่างเป็นระบบ ซึ่งใช้ประโยชน์จากความสามารถของพื้นที่ของ Android XR
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า เวอร์ชันอัลฟ่า
12 ธันวาคม 2024 - - - 1.0.0-alpha01

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ของ XR Compose คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google

เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูล

ดึงดูด

dependencies {
    implementation "androidx.xr.compose:compose:1.0.0-alpha01"

    // Use to write unit tests
    testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha01"
}

Kotlin

dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-alpha01")

    // Use to write unit tests
    testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha01")
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพิงบิวด์

ความคิดเห็น

ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมในเอกสารประกอบของเครื่องมือติดตามปัญหา

รุ่น 1.0

เวอร์ชัน 1.0.0-alpha01

12 ธันวาคม 2024

androidx.xr.compose:compose-*1.0.0-alpha01 ได้รับการปล่อยแล้ว

ฟีเจอร์ของรุ่นแรก

  • เวอร์ชันสำหรับนักพัฒนาแอปครั้งแรกของ Jetpack Compose สำหรับ XR ใช้แนวคิดที่คุ้นเคยของ Compose เช่น แถวและคอลัมน์เพื่อสร้างเลย์เอาต์ UI แบบพื้นที่ใน XR ไม่ว่าคุณจะพอร์ตแอป 2 มิติที่มีอยู่ไปยัง XR หรือสร้างแอป XR ใหม่ตั้งแต่ต้น ไลบรารีนี้มีองค์ประกอบย่อยและองค์ประกอบเชิงพื้นที่ เช่น แผงเชิงพื้นที่และออบิเตอร์ ซึ่งช่วยให้คุณวาง UI ของ Compose 2 มิติหรือ UI ที่อิงตาม Views ที่มีอยู่ลงในเลย์เอาต์เชิงพื้นที่ได้ โดยมีการเปิดตัวองค์ประกอบย่อยของปริมาตร ซึ่งช่วยให้คุณวางเอนทิตี SceneCore เช่น โมเดล 3 มิติ เทียบกับ UI ได้ ดูข้อมูลเพิ่มเติมในคู่มือนักพัฒนาซอฟต์แวร์นี้

    • Subspace: คอมโพสิชันนี้สามารถวางไว้ที่ใดก็ได้ภายในลําดับชั้น UI ของแอป ซึ่งช่วยให้คุณคงเลย์เอาต์สําหรับ UI 2 มิติและ UI เชิงพื้นที่ไว้ได้โดยไม่สูญเสียบริบทระหว่างไฟล์ วิธีนี้ช่วยให้แชร์สิ่งต่างๆ เช่น สถาปัตยกรรมแอปที่มีอยู่ระหว่าง XR กับอุปกรณ์รูปแบบอื่นๆ ได้ง่ายขึ้นโดยไม่ต้องยกสถานะผ่านทั้งต้นไม้ UI หรือปรับโครงสร้างแอปใหม่

    • SpatialPanel: แผงเชิงพื้นที่คือคอมโพสิชันย่อยที่ให้คุณแสดงเนื้อหาแอป เช่น คุณสามารถแสดงการเล่นวิดีโอ ภาพนิ่ง หรือเนื้อหาอื่นๆ ในแผงเชิงพื้นที่

    • Orbiter: Orbiter คือคอมโพเนนต์ UI เชิงพื้นที่ ออกแบบมาเพื่อแนบกับแผงเชิงพื้นที่ที่เกี่ยวข้อง และมีรายการการนำทางและรายการการดำเนินการตามบริบทที่เกี่ยวข้องกับแผงเชิงพื้นที่นั้น เช่น หากสร้างแผงเชิงพื้นที่เพื่อแสดงเนื้อหาวิดีโอ คุณสามารถเพิ่มตัวควบคุมการเล่นวิดีโอไว้ในวงโคจร

    • ปริมาตร: วางเอนทิตี SceneCore เช่น โมเดล 3 มิติ โดยสัมพันธ์กับ UI

  • เลย์เอาต์พื้นที่ทำงาน: คุณสร้างแผงพื้นที่ทำงานหลายรายการและวางไว้ในเลย์เอาต์พื้นที่ทำงานได้โดยใช้ SpatialRow, SpatialColumn, SpatialBox และ SpatialLayoutSpacer ใช้ SubspaceModifier เพื่อปรับแต่งเลย์เอาต์

  • คอมโพเนนต์ UI เชิงพื้นที่: คุณนําองค์ประกอบเหล่านี้มาใช้ซ้ำใน UI 2 มิติได้ และจะเห็นแอตทริบิวต์เชิงพื้นที่ก็ต่อเมื่อเปิดใช้ความสามารถเชิงพื้นที่เท่านั้น

    • SpatialDialog: แผงจะดันกลับเล็กน้อยในเชิงลึกเพื่อแสดงกล่องโต้ตอบที่ยกระดับ
    • SpatialPopUp: แผงจะดันกลับเล็กน้อยใน Z-depth เพื่อแสดงป๊อปอัปที่ยกสูงขึ้น
    • SpatialElevation: SpatialElevationLevel สามารถตั้งค่าเพื่อเพิ่มระดับความสูงได้
  • SpatialCapabilities: ความสามารถเชิงพื้นที่อาจเปลี่ยนแปลงเมื่อผู้ใช้โต้ตอบกับแอปหรือระบบ หรือแอปของคุณเองก็อาจเปลี่ยนแปลงความสามารถเชิงพื้นที่ได้ เช่น การเปลี่ยนเป็นโหมดพื้นที่ในบ้านหรือพื้นที่เต็ม แอปของคุณต้องตรวจสอบ LocalSpatialCapabilities.current เพื่อดูว่าระบบรองรับ API ใดบ้างในสภาพแวดล้อมปัจจุบัน เพื่อหลีกเลี่ยงปัญหา isSpatialUiEnabled: องค์ประกอบ UI แบบ 3 มิติ (เช่น SpatialPanel) isContent3dEnabled: วัตถุ 3 มิติ isAppEnvironmentEnabled: สภาพแวดล้อม isPassthroughControlEnabled: แอปพลิเคชันควบคุมสถานะการส่งผ่านได้หรือไม่ isSpatialAudioEnabled: เสียงรอบทิศทาง

ปัญหาที่ทราบ

  • ปัจจุบันต้องใช้ minSDK 30 เพื่อใช้ Jetpack Compose สำหรับ XR วิธีแก้ปัญหาชั่วคราวคือเพิ่มรายการไฟล์ Manifest ต่อไปนี้ <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> เพื่อให้สามารถบิลด์และรันด้วย minSDK 23 ได้
  • ปัจจุบันแอป Jetpack XR ต้องขอสิทธิ์ android.permission.SCENE_UNDERSTANDING ใน AndroidManifest
  • เมื่อแอปเปิดในโหมดเต็มหน้าจอโดยตรงโดยใช้พร็อพเพอร์ตี้ PROPERTY_XR_ACTIVITY_START_MODE ในไฟล์ Manifest กิจกรรม/แอปพลิเคชันจะเปิดในโฮมสเปซก่อน จากนั้นจึงเปลี่ยนไปเป็นโหมดเต็มหน้าจอ
  • ในตอนแรก glTF ในองค์ประกอบแบบปริมาตรอาจกะพริบในตำแหน่งที่ไม่ถูกต้อง
  • การใช้ SpatialDialog ในแผงที่มีการย้ายไปมากจะดันเนื้อหาไปในทิศทางที่ไม่ถูกต้อง