ขอโฟกัสแบบเป็นโปรแกรม

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

ใช้ FocusRequester

หากต้องการขอโฟกัสอย่างชัดเจน ให้ทำดังนี้

  1. สร้างและจดจำอินสแตนซ์ FocusRequester โดยทำดังนี้ val focusRequester = remember { FocusRequester() }
  2. แนบ FocusRequester ไปยัง Composable เป้าหมายโดยใช้ตัวแก้ไข focusRequester
  3. เรียกใช้ requestFocus() ภายใน Callback ของเหตุการณ์ (เช่น onClick) หรือขอบเขตของ โครูทีน

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

Button(onClick = { focusRequester.requestFocus() }) {
    Text("Request focus on TextField")
}

ตั้งค่าโฟกัสหน้าจอเริ่มต้น

หากต้องการโฟกัสเริ่มต้นที่คอมโพเนนต์หนึ่งๆ เมื่อหน้าจอแสดงขึ้นเป็นครั้งแรก ให้ ทริกเกอร์ requestFocus() ภายใน LaunchedEffect(Unit) ดังนี้

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

เมื่อไปยังส่วนต่างๆ ระหว่างคอนเทนเนอร์หรือกลับจากหน้าจออื่น คุณยังแนบ focusRestorer() ไปยังคอนเทนเนอร์หลัก เพื่อกลับไปโฟกัสที่องค์ประกอบย่อยที่โฟกัสล่าสุดโดยอัตโนมัติได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่คู่มือกู้คืนโฟกัส