ผู้ใช้สามารถย้ายโฟกัสของแป้นพิมพ์ไปยังองค์ประกอบ UI ได้โดยใช้ปุ่ม Tab หรือปุ่มทิศทาง (ลูกศร / D-pad) ดังนี้
- Tab / Shift+Tab: ย้ายโฟกัสไปข้างหน้าหรือข้างหลังตามลำดับการแสดงผลแบบมิติเดียว
- ปุ่มทิศทาง: ย้ายโฟกัสแบบ 2 มิติ (ขึ้น ลง ซ้าย และขวา)
การไปยังส่วนต่างๆ โดยโฟกัสแบบมิติเดียว
ในการย้ายโฟกัสแบบมิติเดียว ปุ่ม Tab จะเลื่อนโฟกัสผ่าน UI ตามลำดับการแสดงผลบนหน้าจอ
ตัวอย่างเช่น เมื่อจัดเรียงปุ่ม 4 ปุ่มในแถว
Column { Row { Button(onClick = { /* ... */ }) { Text("1st") } Button(onClick = { /* ... */ }) { Text("2nd") } } Row { Button(onClick = { /* ... */ }) { Text("3rd") } Button(onClick = { /* ... */ }) { Text("4th") } } }
การกดปุ่ม Tab จะย้ายโฟกัสตามลำดับไปยัง ปุ่มต่างๆ ตามลำดับต่อไปนี้
- ปุ่มแรก (ด้านบนซ้าย)
- ปุ่มที่ 2 (ด้านบนสุด)
- ปุ่มที่ 3 (ด้านล่างซ้าย)
- ปุ่มที่ 4 (ด้านล่างสุด)
การกด Tab บนองค์ประกอบสุดท้ายจะย้อนกลับ ไปยังเป้าหมายโฟกัสแรก การกด Shift+Tab จะย้ายโฟกัสในลำดับย้อนกลับ
การไปยังส่วนต่างๆ โดยใช้โฟกัสแบบ 2 มิติ
การกดปุ่มลูกศรบนแป้นพิมพ์หรือD-pad จะทริกเกอร์การไปยังโฟกัสแบบ 2 มิติ
ในการเคลื่อนที่แบบ 2 มิติ ระบบจะตรวจสอบพิกัดทางเรขาคณิตและ ขอบเขตเชิงพื้นที่ขององค์ประกอบ UI เพื่อกำหนดเป้าหมายที่ใกล้ที่สุดในทิศทางที่ขอ
การย้ายโฟกัสแบบ 2 มิติจะไม่วนรอบ หากผู้ใช้กดปุ่มลง ขณะโฟกัสอยู่ที่องค์ประกอบล่างสุด โฟกัสจะยังคงอยู่ที่องค์ประกอบนั้น แทนที่จะข้ามไปยังด้านบนของหน้าจอ
รีเซ็ตการไปยังส่วนต่างๆ ด้วยโฟกัสด้วยการคลิกด้วยเคอร์เซอร์
เมื่อสลับระหว่างแป้นพิมพ์จริงกับเมาส์หรือทัชแพดบนเดสก์ท็อป หรืออุปกรณ์หน้าจอขนาดใหญ่ ให้ทำดังนี้
- ล้างโฟกัสเมื่อแตะหรือคลิก: การคลิกหรือแตะพื้นที่ที่ไม่มีการโต้ตอบ ด้วยเมาส์หรือทัชแพดจะปล่อยโฟกัสจากองค์ประกอบที่ใช้งานอยู่
- เริ่มการไปยังส่วนต่างๆ อีกครั้ง: หลังจากล้างโฟกัสแล้ว การกดปุ่ม Tab ครั้งถัดไปจะเริ่มการไปยังส่วนต่างๆ แบบ 1 มิติอีกครั้ง ที่เป้าหมายโฟกัสแรกตามลำดับการแสดงผล แทนที่จะกลับมาทำงานต่อจากองค์ประกอบที่ใช้งานอยู่ก่อนหน้านี้ ซึ่งจะเหมือนกับการย้ายโฟกัสแบบ 2 มิติ ปุ่มทิศทางจะย้ายโฟกัสของแป้นพิมพ์ไปยังเป้าหมายโฟกัสที่ใกล้ที่สุด ในทิศทางที่ขอ
ดูรายละเอียดเกี่ยวกับการล้างโฟกัสโดยใช้โปรแกรมได้ที่หัวข้อย้ายและล้างโฟกัส
ปรับแต่งลำดับการไปยังโฟกัส
คุณปรับแต่งลักษณะการทำงานของการไปยังได้
ด้วยตัวแก้ไข focusProperties
ปรับแต่งลำดับการข้ามแบบมิติเดียว
หากต้องการลบล้างการข้ามแบบมิติเดียว ให้ระบุพร็อพเพอร์ตี้ next หรือ previous ด้วย FocusRequester ดังนี้
- สร้างออบเจ็กต์
FocusRequesterด้วยremember { FocusRequester() } - แนบ
FocusRequesterไปยัง Composable เป้าหมาย โดยใช้ตัวแก้ไขfocusRequester - ใช้ตัวแก้ไข
focusPropertiesกับ Composable ต้นทาง และกำหนดFocusRequesterให้กับnext(สำหรับ Tab) หรือprevious(สำหรับ Shift+Tab)
val (first, second, third) = remember { FocusRequester.createRefs() } Column { Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(first) .focusProperties { next = third } ) { Text("First (Tab jumps to Third)") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(second) ) { Text("Second") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(third) ) { Text("Third") } }
ปรับแต่งลำดับการข้ามแบบ 2 มิติ
ในทำนองเดียวกัน คุณสามารถลบล้างการย้ายโฟกัสแบบ 2 มิติ
ได้โดยการกำหนดอินสแตนซ์ FocusRequester
ให้กับ up, down, start, end, left หรือ right
ภายใน focusProperties
val (topButton, bottomButton) = remember { FocusRequester.createRefs() } Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(topButton) .focusProperties { down = bottomButton right = bottomButton } ) { Text("Top button") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(bottomButton) ) { Text("Bottom button") }
หากต้องการบล็อกการไปยังส่วนต่างๆ ด้วยโฟกัสในทิศทางที่เฉพาะเจาะจง
(เช่น ที่ขอบเขตเลย์เอาต์)
ให้กำหนด FocusRequester.Cancel ให้กับพร็อพเพอร์ตี้นั้น
(เช่น down = FocusRequester.Cancel)
หากต้องการคงอัลกอริทึมการข้ามเริ่มต้นของระบบไว้โดยชัดแจ้งสำหรับ
ทิศทางที่กำหนด ให้กำหนด FocusRequester.Default
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- เป้าหมายโฟกัส
- โฟกัสในช่องข้อความ
- โฟกัสเป้าหมายกลุ่ม
- ย้ายและล้างโฟกัส
- ขอโฟกัสโดยใช้โปรแกรม
- ทดสอบการไปยังส่วนต่างๆ โดยใช้โฟกัส