Compose 键盘处理:IME 与 WindowInsets

2024-06-13 · 20 min · 输入

键盘处理是移动应用开发中的常见挑战。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("隐藏键盘")
    }
}

四、最佳实践

总结