键盘处理是移动应用开发中的常见挑战。Compose 提供了完善的 WindowInsets API 来处理键盘显示、隐藏和布局调整。
一、键盘自适应布局
@Composable
fun ChatScreen() {
Column(
modifier = Modifier
.fillMaxSize()
.statusBarsPadding()
.navigationBarsPadding()
.imePadding() // 键盘内边距
) {
LazyColumn(modifier = Modifier.weight(1f)) { ... }
ChatInput()
}
}
二、焦点管理
@Composable
fun FocusExample() {
val focusManager = LocalFocusManager.current
val focusRequester = remember { FocusRequester() }
OutlinedTextField(
modifier = Modifier.focusRequester(focusRequester),
keyboardActions = KeyboardActions(
onDone = { focusManager.clearFocus() }
)
)
// 自动聚焦
LaunchedEffect(Unit) {
focusRequester.requestFocus()
}
}
三、软键盘控制
@Composable
fun KeyboardControl() {
val keyboardController = LocalSoftwareKeyboardController.current
Button(onClick = { keyboardController?.hide() }) {
Text("隐藏键盘")
}
}
四、最佳实践
- ✅ 使用
imePadding()处理键盘 - ✅ 使用
FocusRequester管理焦点 - ✅ 设置正确的
ImeAction - ✅ 实现点击外部收起键盘
- ✅ 配置正确的键盘类型
总结
- WindowInsets:处理系统 UI
- imePadding:适应键盘高度
- FocusManager:管理焦点
- KeyboardController:控制键盘