ทุกครั้งที่โฟกัสเปลี่ยนไปในโครงสร้าง Composition นั้น Compose จะเริ่มเหตุการณ์โฟกัสที่ตัวแก้ไขระดับบนและระดับล่างสามารถสังเกตได้ คุณสามารถใช้ตัวแก้ไข onFocusChanged เพื่อฟังการเปลี่ยนสถานะโฟกัส ค้นหาพร็อพเพอร์ตี้โฟกัสปัจจุบัน และทริกเกอร์การอัปเดต UI ที่ขับเคลื่อนด้วยสถานะ
สังเกตสถานะโฟกัสด้วย onFocusChanged
ตัวแก้ไข onFocusChanged จะแสดงออบเจ็กต์ FocusState เมื่อองค์ประกอบได้รับหรือสูญเสียโฟกัส
ตัวอย่างเช่น คุณสามารถสังเกตการเปลี่ยนแปลงโฟกัสเพื่ออัปเดตสถานะคอมโพเนนต์ที่กำหนดเอง (เช่น การเปลี่ยนสีเส้นขอบขององค์ประกอบหรือการเรียกใช้ภาพเคลื่อนไหว) ได้ดังนี้
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
ในตัวอย่างนี้ remember จะจัดเก็บสีเส้นขอบในการจัดองค์ประกอบใหม่ และสีเส้นขอบจะอัปเดตทุกครั้งที่สถานะโฟกัสขององค์ประกอบเปลี่ยนไป
พร็อพเพอร์ตี้ FocusState
ออบเจ็กต์ FocusState ที่ส่งไปยัง onFocusChanged มีพร็อพเพอร์ตี้หลัก 3 รายการดังนี้
isFocused: แสดงผลtrueหาก Composable ที่เฉพาะเจาะจงซึ่งแนบตัวแก้ไขนี้อยู่กำลังโฟกัสอินพุตที่ใช้งานอยู่hasFocus: แสดงผลtrueหาก Composable นี้หรือ Composable ย่อยใดๆ ของ Composable นี้มีโฟกัสอยู่ ซึ่งจะเป็นประโยชน์สำหรับคอนเทนเนอร์หลัก (เช่น การ์ดหรือแถบเครื่องมือ) ที่ต้องทราบเมื่อมีองค์ประกอบย่อยภายในทำงานอยู่isCaptured: แสดงผลtrueหากปัจจุบันโฟกัสล็อกอยู่ที่องค์ประกอบ (เช่น ระหว่างการโต้ตอบย่อยของโมดัลโดยใช้captureFocus()) ขณะที่บันทึกไว้ การพยายามย้ายโฟกัสไปยังองค์ประกอบอื่นๆ จะไม่ล้างโฟกัส
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- เป้าหมายโฟกัส
- ระบุสถานะโฟกัส
- ขอโฟกัสแบบเป็นโปรแกรม
- จับและปล่อยโฟกัส