โฟกัสในช่องข้อความ

เมื่อผู้ใช้ไปยังส่วนต่างๆ ของ UI ของ Compose ด้วยแป้นพิมพ์ฮาร์ดแวร์, D-pad หรือปุ่มหมุนควบคุม ช่องข้อความจะเข้าร่วมในการไปยังส่วนต่างๆ ของโฟกัสควบคู่ไปกับเป้าหมายโฟกัสอื่นๆ

โดยค่าเริ่มต้น ระบบจะไม่ล็อกโฟกัสไว้ในช่องข้อความ คุณไม่จำเป็นต้องเพิ่มเครื่องจัดการเหตุการณ์คีย์ที่กำหนดเอง (onKeyEvent หรือ onPreviewKeyEvent) เพื่ออนุญาตให้ผู้ใช้ออกจากช่องข้อความ ผู้ใช้สามารถออกจากโหมดนี้ได้ทุกเมื่อโดยใช้ Shift+Tab หรือโดยการไปยังส่วนต่างๆ นอกขอบเขตข้อความด้วยปุ่มทิศทาง

คุณสามารถใช้ KeyboardOptions เพื่อให้การทำงานของแป้นพิมพ์เสมือนที่ใช้งานง่ายซึ่งทำงานร่วมกับการไปยังส่วนต่างๆ ด้วยแป้นพิมพ์จริง เช่น ImeAction.Next จะย้ายโฟกัสไปยังเป้าหมายโฟกัสถัดไป

การข้ามโฟกัสแบบมิติเดียว

ในการข้ามโฟกัสแบบมิติเดียว ลักษณะการทำงานของแป้น Tab จะขึ้นอยู่กับ lineLimits ที่กำหนดค่าไว้ในช่องข้อความ ดังนี้

  • ช่องข้อความบรรทัดเดียว (TextFieldLineLimits.SingleLine) การกดปุ่ม Tab จะย้ายโฟกัสไปยังเป้าหมายโฟกัสถัดไปใน UI
  • ช่องข้อความหลายบรรทัด (TextFieldLineLimits.MultiLine() หรือค่าเริ่มต้น): การกดแป้น Tab จะแทรกอักขระแท็บ (\t) ลงในบัฟเฟอร์ข้อความแทนการย้ายโฟกัส
  • การไปยังส่วนต่างๆ แบบย้อนกลับ (Shift+Tab): การกด Shift+Tab จะย้ายโฟกัสกลับไปยังเป้าหมายโฟกัสก่อนหน้าอย่างไม่มีเงื่อนไขทั้งในช่องข้อความบรรทัดเดียวและหลายบรรทัด

// Single-line text field: Tab advances focus to the next focus target
BasicTextField(
    state = singleLineState,
    lineLimits = TextFieldLineLimits.SingleLine,
    modifier = Modifier.fillMaxWidth()
)

// Multi-line text field: Tab inserts '\t'; Shift + Tab moves to previous target
BasicTextField(
    state = multiLineState,
    lineLimits = TextFieldLineLimits.MultiLine(),
    modifier = Modifier.fillMaxWidth()
)

การข้ามโฟกัสแบบ 2 มิติ

เมื่อใช้ปุ่มลูกศร (หรือ D-pad) ปุ่มบังคับทิศทางจะย้ายเคอร์เซอร์ข้อความ (คาเร็ต) ก่อน ภายในช่องข้อความ:

  • การไปยังส่วนต่างๆ ในแนวตั้ง (ขึ้น / ลง): การกดปุ่ม Down จะเลื่อนเคอร์เซอร์ข้อความลงทีละบรรทัด เมื่อเคอร์เซอร์ไปถึงบรรทัดสุดท้าย การกดปุ่มลูกศรลงอีกครั้งจะย้ายโฟกัส ไปยังเป้าหมายโฟกัสที่อยู่ติดกันใต้ช่องข้อความ การกดปุ่มขึ้นในบรรทัดแรกจะย้ายโฟกัสไปยังเป้าหมายโฟกัสก่อนหน้า
  • การไปยังส่วนต่างๆ ในแนวนอน (ซ้าย / ขวา / เริ่มต้น / สิ้นสุด): การกดแป้นลูกศรแนวนอนจะเลื่อนเคอร์เซอร์ข้อความผ่านอักขระต่างๆ เมื่อเคอร์เซอร์ไปถึงจุดเริ่มต้นหรือจุดสิ้นสุดของบัฟเฟอร์ข้อความ การกดปุ่มทิศทางอีกครั้งจะโอนโฟกัสไปยังเป้าหมายโฟกัสที่อยู่ติดกันในทิศทางนั้น

ช่องข้อความใน Android TV

ใน Android TV ให้ใช้ตัวควบคุม D-pad โดยไม่ต้องใช้แป้นพิมพ์จริง โดยทำดังนี้

  1. การย้ายโฟกัสไปยังช่องข้อความจะแสดงแป้นพิมพ์เสมือนบนหน้าจอโดยอัตโนมัติ
  2. ผู้ใช้ไปยังแป้นต่างๆ ของแป้นพิมพ์เสมือนโดยใช้ D-pad
  3. การกดปุ่มย้อนกลับจะปิดแป้นพิมพ์เสมือน ขณะที่ยังคงโฟกัสที่ช่องข้อความ
  4. เมื่อปิดแป้นพิมพ์เสมือนแล้ว การกดปุ่มทิศทางบน D-pad จะย้ายโฟกัสไปยังเป้าหมายโฟกัสที่อยู่ใกล้เคียงบนหน้าจอ
  5. การกดปุ่มย้อนกลับครั้งที่ 2 จะทริกเกอร์การนำทางย้อนกลับของระบบมาตรฐาน