ในอุปกรณ์ Wear OS องค์ประกอบสำคัญ 2 อย่างจะแสดงผลไทล์โดยมีการควบคุมเวอร์ชันแยกกัน การทำความเข้าใจสถาปัตยกรรมพื้นฐานนี้เป็นสิ่งสำคัญเพื่อให้วิดเจ็ตของแอปทำงานได้อย่างถูกต้องในอุปกรณ์ทุกเครื่อง
- ไลบรารีที่เกี่ยวข้องกับไทล์ Jetpack: ไลบรารีเหล่านี้ (รวมถึงไทล์ Wear
และ ProtoLayout ของ Wear) จะฝังอยู่ในแอป และคุณในฐานะนักพัฒนาแอป
จะเป็นผู้ควบคุมเวอร์ชันของไลบรารี แอปของคุณใช้ไลบรารีเหล่านี้เพื่อสร้างออบเจ็กต์
TileBuilder.Tile(โครงสร้างข้อมูลที่แสดงไทล์ของคุณ) เพื่อตอบสนองต่อการเรียกใช้onTileRequest()ของระบบ - เครื่องมือแสดงผล ProtoLayout: คอมโพเนนต์ของระบบนี้มีหน้าที่แสดงผล
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() }
ระบุรายการสำรอง
แหล่งข้อมูลบางรายการอนุญาตให้คุณกำหนดการสำรองในเครื่องมือสร้างได้โดยตรง ซึ่งมักจะง่ายกว่าการตรวจสอบเวอร์ชันของโปรแกรมแสดงผล และเป็นแนวทางที่แนะนำ เมื่อพร้อมใช้งาน
Use Case ทั่วไปคือการระบุรูปภาพแบบคงที่เป็นข้อมูลสำรองสำหรับภาพเคลื่อนไหว 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 ใช้ตัวแสดงผลที่ฝังอยู่ในไลบรารี Jetpack ProtoLayout ที่โค้ดของคุณขึ้นอยู่กับ ดังนั้นอีกวิธีหนึ่งคือการ ขึ้นอยู่กับไลบรารี 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"
val protoLayoutVersion = "1.3.0"
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()
การเปรียบเทียบฟังก์ชันเลย์เอาต์ 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) .build() ) .build()
M3
fun myLayout( context: Context, deviceConfiguration: DeviceParametersBuilders.DeviceParameters, ) = materialScope(context, deviceConfiguration) { primaryLayout(mainSlot = { text("Hello, World!".layoutString) }) }
ความแตกต่างที่สำคัญมีดังนี้
- การเลิกใช้เครื่องมือสร้าง เราได้แทนที่รูปแบบ Builder ก่อนหน้าสำหรับคอมโพเนนต์ Material UI ด้วยไวยากรณ์ที่ประกาศได้มากขึ้นซึ่งได้รับแรงบันดาลใจจาก Compose (คอมโพเนนต์ที่ไม่ใช่ UI เช่น String/Color/Modifiers จะได้รับ Kotlin wrapper ใหม่ด้วย)
- ฟังก์ชันการเริ่มต้นและเลย์เอาต์ที่ได้มาตรฐาน เลย์เอาต์ M3 ใช้ฟังก์ชันการเริ่มต้นและโครงสร้างที่ได้มาตรฐาน
materialScope()และprimaryLayout()ฟังก์ชันที่จำเป็นเหล่านี้จะเริ่มต้นสภาพแวดล้อม M3 (การกำหนดธีม ขอบเขตของคอมโพเนนต์โดยใช้materialScope) และกำหนด เลย์เอาต์หลักที่อิงตามสล็อต (โดยใช้primaryLayout) ทั้ง 2 อย่างนี้ต้องเรียกใช้ ครั้งเดียวต่อเลย์เอาต์
ธีม
Material 3 มีการเปลี่ยนแปลงหลายอย่างในเรื่องการกำหนดธีม ซึ่งรวมถึงสีแบบไดนามิกและ ชุดตัวเลือกการจัดรูปแบบข้อความและรูปร่างที่ขยาย
สี
ฟีเจอร์ที่โดดเด่นของ Material 3 Expressive คือ "การจัดธีมแบบไดนามิก" โดยไทล์ที่เปิดใช้ฟีเจอร์นี้ (เปิดอยู่โดยค่าเริ่มต้น) จะแสดงในธีมที่ระบบระบุ (ความพร้อมใช้งานขึ้นอยู่กับอุปกรณ์และการกำหนดค่าของผู้ใช้)
การเปลี่ยนแปลงอีกอย่างใน M3 คือการขยายจำนวนโทเค็นสี ซึ่งเพิ่มขึ้นจาก 4 เป็น 29 โทเค็นสีใหม่จะอยู่ในคลาส
ColorScheme
การพิมพ์
M3 คล้ายกับ M2.5 โดยอาศัยค่าคงที่ของขนาดแบบอักษรที่กำหนดไว้ล่วงหน้าเป็นอย่างมาก จึงไม่แนะนำให้ระบุขนาดแบบอักษรโดยตรง ค่าคงที่เหล่านี้อยู่ในคลาส
Typography และมีตัวเลือกที่สื่อความหมายได้มากขึ้น
เล็กน้อย
ดูรายละเอียดทั้งหมดได้ในเอกสารประกอบเกี่ยวกับการพิมพ์
รูปร่าง
คอมโพเนนต์ M3 ส่วนใหญ่จะแตกต่างกันตามมิติข้อมูลของรูปร่างและสี
textButton (ใน mainSlot) ที่มีรูปร่าง full:
ปุ่มข้อความเดียวกันที่มีรูปร่าง small:
คอมโพเนนต์
ชิ้นส่วน M3 มีความยืดหยุ่นและกำหนดค่าได้มากกว่าชิ้นส่วน M2.5 M2.5 มักต้องใช้คอมโพเนนต์ที่แตกต่างกันสำหรับการปรับแต่งภาพที่หลากหลาย ขณะที่ M3 มักใช้คอมโพเนนต์พื้นฐานทั่วไปที่กำหนดค่าได้สูงพร้อมค่าเริ่มต้นที่ดี
หลักการนี้ใช้กับเลย์เอาต์รากได้ด้วย ใน M2.5 จะเป็น PrimaryLayout หรือ EdgeContentLayout ใน M3 หลังจากสร้างMaterialScopeระดับบนสุดรายการเดียวแล้ว คุณจะเรียกใช้ฟังก์ชัน primaryLayout() ฟังก์ชันนี้จะแสดงเลย์เอาต์รูท
โดยตรง ไม่จำเป็นต้องใช้ตัวสร้าง และยอมรับ 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
// Uses Builder-style modifier to set opacity fun myModifier(): ModifiersBuilders.Modifiers = ModifiersBuilders.Modifiers.Builder() .setOpacity(TypeBuilders.FloatProp.Builder(0.5F).build()) .build()
M3
// Uses Compose-like modifiers to set opacity fun myModifier(): LayoutModifier = LayoutModifier.opacity(0.5F)
คุณสร้างตัวแก้ไขได้โดยใช้รูปแบบ API หรือจะใช้ฟังก์ชันส่วนขยาย toProtoLayoutModifiers() เพื่อแปลง LayoutModifier เป็น ModifiersBuilders.Modifier ก็ได้
ฟังก์ชันตัวช่วย
แม้ว่า ProtoLayout 1.3 จะอนุญาตให้แสดงคอมโพเนนต์ UI จำนวนมากโดยใช้ API ที่ได้แรงบันดาลใจจาก Compose แต่เลย์เอาต์พื้นฐาน เช่น แถวและคอลัมน์จาก LayoutElementBuilders จะยังคงใช้รูปแบบ Builder ต่อไป
หากต้องการลดช่องว่างด้านสไตล์นี้และส่งเสริมความสอดคล้องกับ API คอมโพเนนต์ M3 ใหม่ ให้พิจารณาใช้ฟังก์ชันช่วย
ไม่มีผู้ช่วย
primaryLayout( mainSlot = { 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
ในไฟล์บิลด์ของโมดูลแอป ให้ทำการเปลี่ยนแปลงต่อไปนี้
ดึงดูด
// Removeimplementation 'androidx.wear.tiles:tiles-material:version'// Include additional dependencies implementation "androidx.wear.protolayout:protolayout:1.4.0" implementation "androidx.wear.protolayout:protolayout-material:1.4.0" implementation "androidx.wear.protolayout:protolayout-expression:1.4.0" // Update implementation "androidx.wear.tiles:tiles:1.6.0"
Kotlin
// Removeimplementation("androidx.wear.tiles:tiles-material:version")// Include additional dependencies implementation("androidx.wear.protolayout:protolayout:1.4.0") implementation("androidx.wear.protolayout:protolayout-material:1.4.0") implementation("androidx.wear.protolayout:protolayout-expression:1.4.0") // Update implementation("androidx.wear.tiles:tiles:1.6.0")
อัปเดตเนมสเปซ
ในไฟล์โค้ดที่ใช้ Kotlin และ Java ของแอป ให้ทำการอัปเดตต่อไปนี้ หรือจะเรียกใช้สคริปต์การเปลี่ยนชื่อเนมสเปซ นี้ก็ได้
- แทนที่การนำเข้า
androidx.wear.tiles.material.*ทั้งหมดด้วยandroidx.wear.protolayout.material.*ทำขั้นตอนนี้ให้เสร็จสมบูรณ์สำหรับคลังandroidx.wear.tiles.material.layoutsด้วย แทนที่การนำเข้า
androidx.wear.tiles.*อื่นๆ ส่วนใหญ่ด้วยandroidx.wear.protolayout.*การนำเข้าสำหรับ
androidx.wear.tiles.EventBuilders,androidx.wear.tiles.RequestBuilders,androidx.wear.tiles.TileBuildersและandroidx.wear.tiles.TileServiceควรคงเดิมเปลี่ยนชื่อเมธอดที่เลิกใช้งานแล้วบางรายการจากคลาส TileService และ TileBuilder ดังนี้
TileBuilders:getTimeline()ถึงgetTileTimeline()และsetTimeline()ถึงsetTileTimeline()TileService: ตั้งแต่วันที่onResourcesRequest()ถึงonTileResourcesRequest()RequestBuilders.TileRequest:getDeviceParameters()ถึงgetDeviceConfiguration(),setDeviceParameters()ถึงsetDeviceConfiguration(),getState()ถึงgetCurrentState()และsetState()ถึงsetCurrentState()