การกำหนดเวอร์ชันของการ์ด

ในอุปกรณ์ Wear OS คอมโพเนนต์หลัก 2 อย่างที่มีการควบคุมเวอร์ชันแยกกันจะแสดงผลไทล์ หากต้องการให้วิดเจ็ตแอปทำงานได้อย่างถูกต้องในอุปกรณ์ทุกเครื่อง คุณต้องทำความเข้าใจสถาปัตยกรรมพื้นฐานนี้

  • ไลบรารีที่เกี่ยวข้องกับไทล์ Jetpack: ไลบรารีเหล่านี้ (รวมถึง Wear Tiles และ Wear ProtoLayout) จะฝังอยู่ในแอป และคุณในฐานะนักพัฒนาแอป จะเป็นผู้ควบคุมเวอร์ชันของไลบรารี แอปของคุณใช้ไลบรารีเหล่านี้เพื่อสร้างออบเจ็กต์ TileBuilder.Tile (โครงสร้างข้อมูลที่แสดงถึง Tile ของคุณ) เพื่อตอบสนองต่อการเรียก onTileRequest() ของระบบ
  • ProtoLayout Renderer: คอมโพเนนต์ของระบบนี้มีหน้าที่แสดงผลออบเจ็กต์ Tile บนจอแสดงผลและจัดการการโต้ตอบของผู้ใช้ นักพัฒนาแอปไม่สามารถควบคุมเวอร์ชันของโปรแกรมแสดงผลได้ และเวอร์ชันอาจแตกต่างกันไปในอุปกรณ์ต่างๆ แม้ว่าอุปกรณ์เหล่านั้นจะมีฮาร์ดแวร์เหมือนกันก็ตาม

ลักษณะหรือลักษณะการทำงานของไทล์อาจแตกต่างกันไปตามทั้งเวอร์ชันไลบรารี Jetpack Tiles ของแอปและเวอร์ชัน ProtoLayout Renderer ในอุปกรณ์ของผู้ใช้ เช่น อุปกรณ์หนึ่งอาจรองรับการหมุนหรือการแสดงข้อมูลอัตราการเต้นของหัวใจ และอีกเครื่องอาจไม่รองรับ

เอกสารนี้อธิบายวิธีตรวจสอบว่าแอปของคุณเข้ากันได้กับไลบรารีไทล์และ ProtoLayout Renderer เวอร์ชันต่างๆ รวมถึงวิธีย้ายข้อมูลไปยังไลบรารี Jetpack เวอร์ชันที่สูงกว่า

พิจารณาความเข้ากันได้

หากต้องการสร้างไทล์ที่ทำงานได้อย่างถูกต้องในอุปกรณ์ต่างๆ ให้พิจารณา การรองรับฟีเจอร์ที่แตกต่างกัน คุณทำได้โดยใช้กลยุทธ์หลัก 2 อย่าง ได้แก่ การตรวจหาความสามารถของโปรแกรมแสดงผลขณะรันไทม์และการระบุฟอลแบ็กในตัว

ตรวจหาความสามารถของโปรแกรมแสดงผล

คุณสามารถเปลี่ยนเลย์เอาต์ของไทล์แบบไดนามิกได้ตามฟีเจอร์ที่มีใน อุปกรณ์ที่ต้องการ

ตรวจหาเวอร์ชันของโปรแกรมแสดงผล

  • ใช้เมธอด getRendererSchemaVersion() ของออบเจ็กต์ DeviceParameters ที่ส่งไปยังเมธอด onTileRequest() เมธอดนี้จะแสดงหมายเลขเวอร์ชันหลักและเวอร์ชันย่อยของ ProtoLayout Renderer ในอุปกรณ์
  • จากนั้นคุณจะใช้ตรรกะแบบมีเงื่อนไขในการonTileRequest()ติดตั้งใช้งาน เพื่อปรับการออกแบบหรือลักษณะการทำงานของไทล์ตามเวอร์ชันของโปรแกรมแสดงผลที่ตรวจพบได้

คำอธิบายประกอบ @RequiresSchemaVersion

  • คำอธิบายประกอบ @RequiresSchemaVersion ในเมธอด ProtoLayout จะระบุ เวอร์ชันสคีมาของเครื่องมือแสดงผลขั้นต่ำที่จำเป็นเพื่อให้เมธอดนั้นทำงานตามที่ ระบุไว้ในเอกสาร (ตัวอย่าง)
    • แม้ว่าการเรียกใช้เมธอดที่ต้องใช้เวอร์ชันโปรแกรมแสดงผลสูงกว่าเวอร์ชันที่มีในอุปกรณ์จะไม่ทำให้แอปขัดข้อง แต่ก็อาจทำให้เนื้อหาไม่แสดงหรือระบบไม่สนใจฟีเจอร์นั้น

ตัวอย่างการตรวจหาเวอร์ชัน

val rendererVersion = requestParams.deviceConfiguration.rendererSchemaVersion

val arcElement =
    // DashedArcLine has the annotation @RequiresSchemaVersion(major = 1, minor = 500)
    // and so is supported by renderer versions 1.500 and greater
    if (
        rendererVersion.major > 1 ||
        (rendererVersion.major == 1 && rendererVersion.minor >= 500)
    ) {
        // Use DashedArcLine if the renderer supports it …
        DashedArcLine.Builder()
            .setLength(degrees(270f))
            .setThickness(8f)
            .setLinePattern(
                LayoutElementBuilders.DashedLinePattern.Builder()
                    .setGapSize(8f)
                    .setGapInterval(10f)
                    .build()
            )
            .build()
    } else {
        // … otherwise use ArcLine.
        ArcLine.Builder().setLength(degrees(270f)).setThickness(dp(8f)).build()
    }

ระบุรายการสำรอง

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

กรณีการใช้งานที่พบบ่อยคือการระบุรูปภาพแบบคงที่เป็นภาพสำรองสำหรับภาพเคลื่อนไหว Lottie หากอุปกรณ์ไม่รองรับภาพเคลื่อนไหว Lottie อุปกรณ์จะแสดง ภาพนิ่งแทน

val lottieImage =
    ResourceBuilders.ImageResource.Builder()
        .setAndroidLottieResourceByResId(
            ResourceBuilders.AndroidLottieResourceByResId.Builder(R.raw.lottie)
                .setStartTrigger(createOnVisibleTrigger())
                .build()
        )
        // Fallback if lottie is not supported
        .setAndroidResourceByResId(
            ResourceBuilders.AndroidImageResourceByResId.Builder()
                .setResourceId(R.drawable.lottie_fallback)
                .build()
        )
        .build()

ทดสอบกับเวอร์ชันโปรแกรมแสดงผลต่างๆ

หากต้องการทดสอบไทล์กับตัวแสดงผลเวอร์ชันต่างๆ ให้ติดตั้งใช้งานไทล์ในโปรแกรมจำลอง Wear OS เวอร์ชันต่างๆ (ในอุปกรณ์จริง Play Store หรือการอัปเดตระบบจะส่งการอัปเดต ProtoLayout Renderer ไม่สามารถบังคับให้ติดตั้งโปรแกรมแสดงผลเวอร์ชันใดเวอร์ชันหนึ่งได้)

ฟีเจอร์ตัวอย่างไทล์ของ Android Studio ใช้ตัวแสดงผลที่ฝังอยู่ในไลบรารี ProtoLayout ของ Jetpack ที่โค้ดของคุณขึ้นอยู่กับ ดังนั้นอีกวิธีหนึ่งคือการ ขึ้นอยู่กับไลบรารี Jetpack เวอร์ชันต่างๆ เมื่อทดสอบไทล์

ย้ายข้อมูลไปยังการ์ด 1.5 / ProtoLayout 1.3 (Material 3 Expressive)

อัปเดตไลบรารีไทล์ Jetpack เพื่อใช้ประโยชน์จากการปรับปรุงล่าสุด รวมถึงการเปลี่ยนแปลง UI เพื่อให้ไทล์ผสานรวมกับระบบได้อย่างราบรื่น

Jetpack Tiles 1.5 และ Jetpack ProtoLayout 1.3 มาพร้อมการปรับปรุงและการเปลี่ยนแปลงที่สำคัญหลายอย่าง ซึ่งรวมถึงฟีเจอร์ต่อไปนี้

  • API ที่คล้ายกับ Compose สำหรับอธิบาย UI
  • คอมโพเนนต์ Material 3 Expressive รวมถึงปุ่มที่อยู่ขอบด้านล่าง และรองรับภาพที่ดียิ่งขึ้น ได้แก่ ภาพเคลื่อนไหว Lottie, การไล่ระดับสี ประเภทต่างๆ และรูปแบบเส้นโค้งใหม่ - หมายเหตุ: คุณยังใช้ฟีเจอร์บางอย่างเหล่านี้ได้โดยไม่ต้องย้ายข้อมูลไปยัง API ใหม่

คำแนะนำ

  • ย้ายข้อมูลไทล์ทั้งหมดพร้อมกัน หลีกเลี่ยงการใช้เวอร์ชันไทล์ที่แตกต่างกัน ภายในแอป แม้ว่าคอมโพเนนต์ Material 3 จะอยู่ในอาร์ติแฟกต์แยกต่างหาก (androidx.wear.protolayout:protolayout-material3) ซึ่งทำให้สามารถใช้ทั้งไทล์ M2.5 และ M3 ในแอปเดียวกันได้ในทางเทคนิค แต่เราขอแนะนำอย่างยิ่งว่าไม่ควรใช้วิธีนี้ เว้นแต่จะจำเป็นอย่างยิ่ง (เช่น หากแอปมีไทล์จำนวนมากที่ย้ายข้อมูลพร้อมกันไม่ได้)
  • ใช้คำแนะนำเกี่ยวกับ UX ของหน้าต่าง เนื่องจากลักษณะของไทล์ที่มีโครงสร้างและเทมเพลตสูง ให้ใช้การออกแบบในตัวอย่างที่มีอยู่เป็นจุดเริ่มต้น สำหรับการออกแบบของคุณเอง
  • ทดสอบในหน้าจอและขนาดแบบอักษรต่างๆ โดยทั่วไปแล้วไทล์มักจะมีข้อมูลจำนวนมาก ทำให้ข้อความ (โดยเฉพาะเมื่อวางไว้บนปุ่ม) มีแนวโน้มที่จะล้นและถูกตัดออก หากต้องการลดปัญหานี้ ให้ใช้คอมโพเนนต์ที่สร้างไว้ล่วงหน้า และหลีกเลี่ยงการปรับแต่งที่ซับซ้อน ทดสอบโดยใช้ฟีเจอร์แสดงตัวอย่างไทล์ของ Android Studio รวมถึงในอุปกรณ์จริงหลายเครื่อง

กระบวนการย้ายข้อมูล

อัปเดตทรัพยากร Dependency

ก่อนอื่น ให้อัปเดตไฟล์ build.gradle.kts อัปเดตเวอร์ชันและเปลี่ยนทรัพยากร Dependency ของ protolayout-material เป็น protolayout-material3 ดังที่แสดง

// In build.gradle.kts

//val tilesVersion = "1.4.1"
//val protoLayoutVersion = "1.2.1"

// Use these versions for M3.
val tilesVersion = "1.5.0-rc01"
val protoLayoutVersion = "1.3.0-rc01"

 dependencies {
     // Use to implement support for wear tiles
     implementation("androidx.wear.tiles:tiles:$tilesVersion")

     // Use to utilize standard components and layouts in your tiles
     implementation("androidx.wear.protolayout:protolayout:$protoLayoutVersion")

     // Use to utilize components and layouts with Material Design in your tiles
     // implementation("androidx.wear.protolayout:protolayout-material:$protoLayoutVersion")
     implementation("androidx.wear.protolayout:protolayout-material3:$protoLayoutVersion")

     // Use to include dynamic expressions in your tiles
     implementation("androidx.wear.protolayout:protolayout-expression:$protoLayoutVersion")

     // Use to preview wear tiles in your own app
     debugImplementation("androidx.wear.tiles:tiles-renderer:$tilesVersion")

     // Use to fetch tiles from a tile provider in your tests
     testImplementation("androidx.wear.tiles:tiles-testing:$tilesVersion")
 }

TileService จะยังคงเหมือนเดิม

การเปลี่ยนแปลงหลักๆ ในการย้ายข้อมูลนี้จะส่งผลต่อคอมโพเนนต์ UI ดังนั้น การติดตั้งใช้งาน TileService รวมถึงกลไกการโหลดทรัพยากรใดๆ จึงควรต้องมีการแก้ไขน้อยที่สุดหรือไม่ต้องแก้ไขเลย

ข้อยกเว้นหลักเกี่ยวข้องกับการติดตามกิจกรรมในไทล์ หากแอปใช้ onTileEnterEvent() หรือ onTileLeaveEvent() คุณควรย้ายข้อมูลไปยัง onRecentInteractionEventsAsync() ตั้งแต่ API 36 เป็นต้นไป ระบบจะจัดกลุ่มเหตุการณ์เหล่านี้ เป็นชุด

ปรับโค้ดการสร้างเลย์เอาต์

ใน ProtoLayout 1.2 (M2.5) เมธอด onTileRequest() จะแสดงผล TileBuilders.Tile ออบเจ็กต์นี้มีองค์ประกอบต่างๆ รวมถึง TimelineBuilders.Timeline ซึ่งมี LayoutElement ที่อธิบาย UI ของไทล์

ใน ProtoLayout 1.3 (M3) แม้ว่าโครงสร้างและการไหลของข้อมูลโดยรวมจะไม่ได้เปลี่ยนแปลง แต่ตอนนี้LayoutElementสร้างขึ้นโดยใช้แนวทางที่ได้แรงบันดาลใจจาก Compose โดยมีเลย์เอาต์ที่อิงตามช่องที่กำหนดไว้ ซึ่งประกอบด้วย (จากบนลงล่าง) titleSlot (ไม่บังคับ โดยปกติจะใช้สำหรับชื่อหลักหรือส่วนหัว), mainSlot (บังคับ ใช้สำหรับเนื้อหาหลัก) และ bottomSlot (ไม่บังคับ มักใช้สำหรับการดำเนินการ เช่น ปุ่มขอบหรือข้อมูลเสริม เช่น ข้อความสั้น) เลย์เอาต์นี้สร้างขึ้นโดยฟังก์ชัน primaryLayout()

เลย์เอาต์ของการ์ดที่แสดง mainSlot, titleSlot, bottomSlot
รูปที่ 1: ช่องของการ์ด
การเปรียบเทียบฟังก์ชันเลย์เอาต์ M2.5 และ M3

M2.5

fun myLayout(
    context: Context,
    deviceConfiguration: DeviceParametersBuilders.DeviceParameters
) =
    PrimaryLayout.Builder(deviceConfiguration)
        .setResponsiveContentInsetEnabled(true)
        .setContent(
            Text.Builder(context, "Hello World!")
                .setTypography(Typography.TYPOGRAPHY_BODY1)
                .setColor(argb(0xFFFFFFFF.toInt()))
                .build()
        )
        .build()

M3

fun myLayout(
    context: Context,
    deviceConfiguration: DeviceParametersBuilders.DeviceParameters,
) =
    materialScope(context, deviceConfiguration) {
        primaryLayout(mainSlot = { text("Hello, World!".layoutString) })
    }

ความแตกต่างที่สำคัญมีดังนี้

  1. การยกเลิกการใช้ Builders รูปแบบ Builder แบบเดิมสำหรับคอมโพเนนต์ UI ของ Material3 จะถูกแทนที่ด้วยไวยากรณ์ที่ประกาศได้มากขึ้นซึ่งได้รับแรงบันดาลใจจาก Compose (คอมโพเนนต์ที่ไม่ใช่ UI เช่น String/Color/Modifiers จะได้รับ Kotlin wrapper ใหม่ด้วย)
  2. ฟังก์ชันการเริ่มต้นและเลย์เอาต์ที่ได้มาตรฐาน เลย์เอาต์ M3 ใช้ฟังก์ชันการเริ่มต้นและโครงสร้างที่ได้มาตรฐาน materialScope() และ primaryLayout() ฟังก์ชันที่จำเป็นเหล่านี้จะเริ่มต้นสภาพแวดล้อม M3 (การกำหนดธีม ขอบเขตของคอมโพเนนต์ผ่าน materialScope) และกำหนด เลย์เอาต์หลักที่อิงตามช่อง (ผ่าน primaryLayout) ทั้ง 2 อย่างนี้ต้องเรียกใช้เพียงครั้งเดียวต่อเลย์เอาต์

ธีม

สี

ฟีเจอร์ที่โดดเด่นของ Material 3 Expressive คือ "การกำหนดธีมแบบไดนามิก" โดยไทล์ที่เปิดใช้ฟีเจอร์นี้ (เปิดอยู่โดยค่าเริ่มต้น) จะแสดงในธีมที่ระบบจัดให้ (ความพร้อมใช้งานขึ้นอยู่กับอุปกรณ์และการกำหนดค่าของผู้ใช้)

การเปลี่ยนแปลงอีกอย่างใน M3 คือการขยายจำนวนโทเค็นสี ซึ่งเพิ่มขึ้นจาก 4 เป็น 29 โทเค็นสีใหม่จะอยู่ในคลาส ColorScheme

การออกแบบตัวอักษร

M3 คล้ายกับ M2.5 โดยอาศัยค่าคงที่ของขนาดแบบอักษรที่กำหนดไว้ล่วงหน้าเป็นอย่างมาก จึงไม่แนะนำให้ระบุขนาดแบบอักษรโดยตรง ค่าคงที่เหล่านี้อยู่ในคลาส Typography และมีตัวเลือกที่สื่อความหมายได้มากขึ้น เล็กน้อย

ดูรายละเอียดทั้งหมดได้ในเอกสารประกอบเกี่ยวกับการพิมพ์

รูปทรง

คอมโพเนนต์ M3 ส่วนใหญ่จะแตกต่างกันไปตามมิติข้อมูลของรูปร่างและสี

textButton (ใน mainSlot) ที่มีรูปร่าง full:

ไทล์ที่มีรูปร่าง "เต็ม" (มุมโค้งมนมากขึ้น)
รูปที่ 2: ชิ้นส่วนที่มีรูปร่าง "เต็ม"

ปุ่มข้อความเดียวกันที่มีรูปร่าง small:

ไทล์ที่มีรูปร่าง "เล็ก" (มุมโค้งมนน้อยกว่า)
รูปที่ 3: ชิ้นส่วนที่มีรูปร่าง "เล็ก"

คอมโพเนนต์

คอมโพเนนต์ M3 มีความยืดหยุ่นและกำหนดค่าได้มากกว่าคอมโพเนนต์ M2.5 อย่างมาก ในขณะที่ M2.5 มักต้องใช้คอมโพเนนต์ที่แตกต่างกันสำหรับการปรับแต่งภาพที่หลากหลาย แต่ M3 มักใช้คอมโพเนนต์ "ฐาน" ที่มีความทั่วไปแต่กำหนดค่าได้สูงพร้อมค่าเริ่มต้นที่ดี

หลักการนี้ใช้กับเลย์เอาต์ "รูท" ใน M2.5 ค่านี้จะเป็น PrimaryLayout หรือ EdgeContentLayout ใน M3 หลังจากสร้างMaterialScopeระดับบนสุดรายการเดียวแล้ว ระบบจะเรียกใช้ฟังก์ชัน primaryLayout() ซึ่งจะแสดงผลเลย์เอาต์รูทโดยตรง (ไม่จำเป็นต้องใช้ Builder) และยอมรับ LayoutElements สำหรับ "ช่อง" หลายช่อง เช่น titleSlot, mainSlot และ bottomSlot ช่องเหล่านี้สามารถแสดงคอมโพเนนต์ UI ที่เฉพาะเจาะจงได้ เช่น ที่ส่งคืนโดย text(), button() หรือ card() หรือโครงสร้างเลย์เอาต์ เช่น Row หรือ Column จาก LayoutElementBuilders

ธีมเป็นอีกหนึ่งการปรับปรุงที่สำคัญของ M3 โดยค่าเริ่มต้น องค์ประกอบ UI จะยึดตามข้อกำหนดการจัดรูปแบบ M3 โดยอัตโนมัติและรองรับการกำหนดธีมแบบไดนามิก

M2.5 M3
องค์ประกอบแบบอินเทอร์แอกทีฟ
Button หรือ Chip
ข้อความ
Text text()
ตัวบ่งชี้ความคืบหน้า
CircularProgressIndicator circularProgressIndicator() หรือ segmentedCircularProgressIndicator()
เลย์เอาต์
PrimaryLayout หรือ EdgeContentLayout primaryLayout()
buttonGroup()
รูปภาพ
icon(), avatarImage() หรือ backgroundImage()

ตัวปรับแต่ง

ใน M3 Modifiers ซึ่งคุณใช้เพื่อตกแต่งหรือเพิ่มคอมโพเนนต์ จะมีลักษณะคล้าย Compose มากขึ้น การเปลี่ยนแปลงนี้ช่วยลดโค้ดสำเร็จรูปได้ด้วยการสร้างประเภทภายในที่เหมาะสมโดยอัตโนมัติ (การเปลี่ยนแปลงนี้ไม่เกี่ยวข้องกับการใช้คอมโพเนนต์ UI ของ M3 หากจำเป็น คุณสามารถใช้ตัวแก้ไขสไตล์ Builder จาก ProtoLayout 1.2 กับคอมโพเนนต์ UI ของ M3 และในทางกลับกัน)

M2.5

// A Builder-style modifier to set the opacity of an element to 0.5
fun myModifier(): ModifiersBuilders.Modifiers =
    ModifiersBuilders.Modifiers.Builder()
        .setOpacity(TypeBuilders.FloatProp.Builder(0.5F).build())
        .build()

M3

// The equivalent Compose-like modifier is much simpler
fun myModifier(): LayoutModifier = LayoutModifier.opacity(0.5F)

คุณสร้างตัวแก้ไขได้โดยใช้รูปแบบ API หรือจะใช้ฟังก์ชันส่วนขยาย toProtoLayoutModifiers() เพื่อแปลง LayoutModifier เป็น ModifiersBuilders.Modifier ก็ได้

ฟังก์ชันตัวช่วย

แม้ว่า ProtoLayout 1.3 จะอนุญาตให้แสดงคอมโพเนนต์ UI จำนวนมากโดยใช้ API ที่ได้แรงบันดาลใจจาก Compose แต่เลย์เอาต์พื้นฐาน เช่น แถวและคอลัมน์จาก LayoutElementBuilders จะยังคงใช้รูปแบบ Builder ต่อไป หากต้องการลดช่องว่างด้านสไตล์และส่งเสริมความสอดคล้องกับ API ของคอมโพเนนต์ M3 ใหม่ ให้พิจารณาใช้ฟังก์ชันช่วย

ไม่มีผู้ช่วย

primaryLayout(
    mainSlot = {
        LayoutElementBuilders.Column.Builder()
            .setWidth(expand())
            .setHeight(expand())
            .addContent(text("A".layoutString))
            .addContent(text("B".layoutString))
            .addContent(text("C".layoutString))
            .build()
    }
)

พร้อมผู้ช่วย

// Function literal with receiver helper function
fun column(builder: Column.Builder.() -> Unit) =
    Column.Builder().apply(builder).build()

primaryLayout(
    mainSlot = {
        column {
            setWidth(expand())
            setHeight(expand())
            addContent(text("A".layoutString))
            addContent(text("B".layoutString))
            addContent(text("C".layoutString))
        }
    }
)

ย้ายข้อมูลไปยังการ์ด 1.2 / ProtoLayout 1.0

ตั้งแต่เวอร์ชัน 1.2 เป็นต้นไป API เลย์เอาต์ของไทล์ส่วนใหญ่จะอยู่ในเนมสเปซ androidx.wear.protolayout หากต้องการใช้ API เวอร์ชันล่าสุด ให้ทําตามขั้นตอนการย้ายข้อมูลต่อไปนี้ในโค้ด

อัปเดตทรัพยากร Dependency

ในไฟล์บิลด์ของโมดูลแอป ให้ทำการเปลี่ยนแปลงต่อไปนี้

Groovy

  // Remove
  implementation 'androidx.wear.tiles:tiles-material:version'

  // Include additional dependencies
  implementation "androidx.wear.protolayout:protolayout:1.3.0"
  implementation "androidx.wear.protolayout:protolayout-material:1.3.0"
  implementation "androidx.wear.protolayout:protolayout-expression:1.3.0"

  // Update
  implementation "androidx.wear.tiles:tiles:1.5.0"

Kotlin

  // Remove
  implementation("androidx.wear.tiles:tiles-material:version")

  // Include additional dependencies
  implementation("androidx.wear.protolayout:protolayout:1.3.0")
  implementation("androidx.wear.protolayout:protolayout-material:1.3.0")
  implementation("androidx.wear.protolayout:protolayout-expression:1.3.0")

  // Update
  implementation("androidx.wear.tiles:tiles:1.5.0")

อัปเดตเนมสเปซ

ในไฟล์โค้ดที่ใช้ Kotlin และ Java ของแอป ให้ทำการอัปเดตต่อไปนี้ หรือจะเรียกใช้สคริปต์การเปลี่ยนชื่อเนมสเปซ นี้ก็ได้

  1. แทนที่การนำเข้า androidx.wear.tiles.material.* ทั้งหมดด้วย androidx.wear.protolayout.material.* ทำขั้นตอนนี้สำหรับคลัง androidx.wear.tiles.material.layouts ด้วย
  2. แทนที่การนำเข้า androidx.wear.tiles.* อื่นๆ ส่วนใหญ่ด้วย androidx.wear.protolayout.*

    การนำเข้าสำหรับ androidx.wear.tiles.EventBuilders, androidx.wear.tiles.RequestBuilders, androidx.wear.tiles.TileBuilders และ androidx.wear.tiles.TileService ควรคงเดิม

  3. เปลี่ยนชื่อเมธอดที่เลิกใช้งานแล้วบางรายการจากคลาส TileService และ TileBuilder ดังนี้

    1. TileBuilders: getTimeline() ถึง getTileTimeline() และ setTimeline() ถึง setTileTimeline()
    2. TileService: onResourcesRequest() ถึง onTileResourcesRequest()
    3. RequestBuilders.TileRequest: getDeviceParameters() ถึง getDeviceConfiguration(), setDeviceParameters() ถึง setDeviceConfiguration(), getState() ถึง getCurrentState() และ setState() ถึง setCurrentState()