0Pricing
Android Academy · 课时

键盘选项与操作

了解键盘类型、IME 操作和焦点

键盘选项与操作 是 CoddyKit 上的免费 Android Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。

选择合适的键盘

精心设计的表单会显示正确的屏幕键盘:电话号码使用数字键盘,电子邮件提供 @ 键,并提供“下一步”按钮在字段之间移动。Compose 使用 KeyboardOptions 和 KeyboardActions 控制这一切。

在本课中,您将设置键盘类型和 IME 操作,并管理字段之间的焦点。

选择键盘类型

将 KeyboardOptions 传递给文本字段,并设置 keyboardType。系统随后会显示适合该数据的键盘。

常见的值包括:Text、Number、Email、Phone、Password。

var email by remember { mutableStateOf("") }

OutlinedTextField(
    value = email,
    onValueChange = { email = it },
    label = { Text("Email") },
    keyboardOptions = KeyboardOptions(
        keyboardType = KeyboardType.Email
    )
)

数字键盘

对于数量或 PIN,请使用 KeyboardType.Number。将它与输入过滤结合使用,只接受数字,正如您在验证课程中学到的那样。

var pin by remember { mutableStateOf("") }

OutlinedTextField(
    value = pin,
    onValueChange = { pin = it.filter { c -> c.isDigit() } },
    label = { Text("PIN") },
    keyboardOptions = KeyboardOptions(
        keyboardType = KeyboardType.Number
    )
)

隐藏密码

密码应当进行遮挡。将 visualTransformation = PasswordVisualTransformation() 与密码键盘类型结合使用。

状态中仍然保存真实字符,只有显示内容会被遮挡。

var password by remember { mutableStateOf("") }

OutlinedTextField(
    value = password,
    onValueChange = { password = it },
    label = { Text("Password") },
    visualTransformation = PasswordVisualTransformation(),
    keyboardOptions = KeyboardOptions(
        keyboardType = KeyboardType.Password
    )
)

IME 操作按钮

键盘右下角的按键就是 IME 操作按钮。使用 imeAction 设置它。使用 Next 移动到下一个字段,并在最后一个字段使用 Done。

OutlinedTextField(
    value = name,
    onValueChange = { name = it },
    label = { Text("Name") },
    keyboardOptions = KeyboardOptions(
        imeAction = ImeAction.Next
    )
)

响应 IME 操作

若要响应用户点击该按钮,请传入 KeyboardActions。每个操作(onNext、onDone、onSearch)都是由您实现的 lambda。

这里点击 Done 后会隐藏键盘。

val keyboard = LocalSoftwareKeyboardController.current

OutlinedTextField(
    value = text,
    onValueChange = { text = it },
    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
    keyboardActions = KeyboardActions(
        onDone = { keyboard?.hide() }
    )
)

将焦点移动到下一个字段

对于多字段表单,“下一步”按钮应跳转到后续字段。使用 LocalFocusManager 并调用 moveFocus。

val focusManager = LocalFocusManager.current

OutlinedTextField(
    value = email,
    onValueChange = { email = it },
    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
    keyboardActions = KeyboardActions(
        onNext = { focusManager.moveFocus(FocusDirection.Down) }
    )
)

点击完成时清除焦点

在最后一个字段中,清除焦点会关闭键盘,并取消字段选中状态。在 onDone 中调用 focusManager.clearFocus()。

OutlinedTextField(
    value = password,
    onValueChange = { password = it },
    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
    keyboardActions = KeyboardActions(
        onDone = { focusManager.clearFocus() }
    )
)

以编程方式请求焦点

有时您希望界面一出现,某个字段就自动获得焦点,例如搜索框。附加一个 FocusRequester,并在 LaunchedEffect 中请求焦点。

val focusRequester = remember { FocusRequester() }

LaunchedEffect(Unit) { focusRequester.requestFocus() }

OutlinedTextField(
    value = query,
    onValueChange = { query = it },
    modifier = Modifier.focusRequester(focusRequester),
    label = { Text("Search") }
)

大小写转换和自动更正

KeyboardOptions 还可以控制 capitalization 和 autoCorrectEnabled。姓名可以设置为每个单词首字母大写;用户名则可以关闭自动更正,避免内容被错误修改。

OutlinedTextField(
    value = fullName,
    onValueChange = { fullName = it },
    label = { Text("Full name") },
    keyboardOptions = KeyboardOptions(
        capitalization = KeyboardCapitalization.Words,
        autoCorrectEnabled = false
    )
)

纯 Kotlin:选择 IME 操作

“除最后一个字段外都使用 Next,最后一个字段使用 Done”这一逻辑就是普通的 Kotlin。这里将字段位置映射到它们应显示的操作标签。

fun imeActionFor(index: Int, lastIndex: Int): String =
    if (index == lastIndex) "Done" else "Next"

fun main() {
    val fields = listOf("name", "email", "password")
    fields.forEachIndexed { i, field ->
        println("$field -> ${imeActionFor(i, fields.lastIndex)}")
    }
}

快速检查

您希望键盘右下角的按钮显示“下一步”,点击后将焦点移动到下方字段。需要哪两个部分?

回顾

现在,您可以构建能够灵活适配键盘的表单:

  • KeyboardOptions 设置 keyboardType、imeAction、大小写转换和自动更正。
  • 使用 PasswordVisualTransformation 遮挡密码。
  • KeyboardActions 响应 Next、Done 和 Search。
  • LocalFocusManager 移动或清除焦点;FocusRequester 可按需让字段获得焦点。

至此,表单构建工具包就完成了:输入、状态、验证和键盘。您已经可以构建精致且友好的 Compose 表单了。

常见问题解答

「键盘选项与操作」课时是免费的吗?

是的 — 「键盘选项与操作」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。

「键盘选项与操作」这节课中我会学到什么?

了解键盘类型、IME 操作和焦点 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Android Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「键盘选项与操作」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Android Academy 课中编写并运行代码吗?

能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. TextField 与用户输入
  2. 管理表单状态
  3. 验证输入
  4. 键盘选项与操作
← 返回 Android Academy