การใส่ข้อมูลด้วยปุ่มหมุนหมายถึงการใส่ข้อมูลจากชิ้นส่วนของนาฬิกาที่หมุนได้ โดยเฉลี่ยแล้ว ผู้ใช้ใช้เวลาเพียงไม่กี่วินาทีในการโต้ตอบกับนาฬิกา คุณปรับปรุงประสบการณ์ของผู้ใช้ได้โดยใช้การใส่ข้อมูลด้วยปุ่มหมุนพื่อช่วยให้ผู้ใช้ ทำงานต่างๆ สำเร็จได้อย่างรวดเร็ว
แหล่งที่มาหลัก 3 อย่างของการใส่ข้อมูลด้วยปุ่มหมุนในนาฬิกาส่วนใหญ่ ได้แก่ ปุ่มด้านข้างแบบหมุน (RSB) และขอบหน้าปัดจริงหรือขอบหน้าปัดแบบสัมผัส ซึ่งเป็นโซนสัมผัสแบบวงกลมรอบหน้าจอ แม้ว่าลักษณะการทำงานที่คาดไว้จะแตกต่างกันไปตามประเภทอินพุต แต่ควรรองรับการใส่ข้อมูลด้วยปุ่มหมุนสำหรับการโต้ตอบที่จำเป็นทั้งหมด
ตัวบ่งชี้การเลื่อน
ผู้ใช้ส่วนใหญ่คาดหวังให้แอปต่างๆ รองรับท่าทางการเลื่อน ขณะที่เนื้อหาเลื่อนบนหน้าจอ ให้แสดงความคิดเห็นด้วยภาพแก่ผู้ใช้เพื่อตอบสนองต่อการโต้ตอบแบบหมุน ความคิดเห็นด้วยภาพอาจรวมถึงตัวบ่งชี้การเลื่อนสำหรับการเลื่อนแนวตั้งหรือตัวบ่งชี้หน้า
ScalingLazyColumn, TransformingLazyColumn และ Picker รองรับท่าทางการเลื่อน
โดยค่าเริ่มต้น หากคุณวางคอมโพเนนต์เหล่านี้ไว้ภายใน AppScaffold และ ScreenScaffold และส่งสถานะรายการระหว่าง
ScreenScaffold กับคอมโพเนนต์ เช่น TransformingLazyColumn
AppScaffold และ ScreenScaffold มีโครงสร้างเลย์เอาต์พื้นฐานสำหรับแอป Wear
OS และมีช่องสำหรับตัวบ่งชี้การเลื่อนพร้อมการใช้งานเริ่มต้นอยู่แล้ว
หากต้องการปรับแต่งความคืบหน้าในการเลื่อน ให้สร้างตัวบ่งชี้การเลื่อน
โดยอิงตามออบเจ็กต์สถานะรายการ ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
val listState = rememberTransformingLazyColumnState() ScreenScaffold( scrollState = listState, scrollIndicator = { ScrollIndicator(state = listState) } ) { // ... }
คุณกําหนดค่าลักษณะการทํางานแบบสแนปสําหรับ ScalingLazyColumn ได้โดยใช้
ScalingLazyColumnDefaults.snapFlingBehavior ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
val listState = rememberScalingLazyListState() ScreenScaffold( scrollState = listState, scrollIndicator = { ScrollIndicator(state = listState) } ) { val state = rememberScalingLazyListState() ScalingLazyColumn( modifier = Modifier.fillMaxWidth(), state = state, flingBehavior = ScalingLazyColumnDefaults.snapFlingBehavior(state = state) ) { // Content goes here // ... } }
การทำงานที่กำหนดเอง
นอกจากนี้ คุณยังสร้างการทำงานที่กําหนดเองซึ่งตอบสนองต่อการใส่ข้อมูลด้วยปุ่มหมุนในแอปได้ด้วย เช่น ใช้การใส่ข้อมูลด้วยปุ่มหมุนเพื่อซูมเข้าและออก หรือเพื่อควบคุมระดับเสียงในแอปสื่อ
หากคอมโพเนนต์ไม่รองรับเหตุการณ์การเลื่อนโดยตรง เช่น การควบคุมระดับเสียง คุณสามารถจัดการเหตุการณ์การเลื่อนด้วยตนเองได้
ขั้นตอนแรกคือการสร้างสถานะที่กำหนดเองซึ่งจัดการในโมเดลการแสดงผลและการเรียกกลับที่กำหนดเองซึ่งใช้เพื่อประมวลผลเหตุการณ์การเลื่อนแบบหมุน
class VolumeRange( val max: Int = 10, val min: Int = 0 ) private object VolumeViewModel { class MyViewModel : ViewModel() { private val _volumeState = mutableIntStateOf(0) val volumeState: State<Int> get() = _volumeState // ... fun onVolumeChangeByScroll(pixels: Float) { _volumeState.value = when { pixels > 0 -> minOf(volumeState.value + 1, VolumeRange().max) pixels < 0 -> maxOf(volumeState.value - 1, VolumeRange().min) else -> volumeState.value } } } }
จากนั้นใช้การเรียกกลับเมื่อได้รับเหตุการณ์ ดังที่แสดงใน ข้อมูลโค้ดต่อไปนี้
val focusRequester: FocusRequester = remember { FocusRequester() } val volumeViewModel: VolumeViewModel.MyViewModel = viewModel() val volumeState by volumeViewModel.volumeState TransformingLazyColumn( modifier = Modifier .fillMaxSize() .onRotaryScrollEvent { volumeViewModel.onVolumeChangeByScroll(it.verticalScrollPixels) true } .focusRequester(focusRequester) .focusable(), ) { // You can use volumeState here, for example: item { Text("Volume: $volumeState") } }
โปรดทราบว่าตัวอย่างก่อนหน้านี้ใช้ค่าพิกเซลเพื่อให้เข้าใจได้ง่าย ซึ่งหากนำไปใช้งานจริงอาจส่งผลให้การตอบสนองไวเกินไป
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- เปลี่ยนลักษณะการทำงานของโฟกัส
- เพิ่มการรองรับแป้นพิมพ์ เมาส์ แทร็กแพด และสไตลัสด้วย Jetpack Compose
- Codelab ของ Compose สำหรับ Wear OS