【问题标题】:Is there a Jetpack Compose equivalent of A password field with the password visible to the user?是否存在与密码字段等效的 Jetpack Compose,用户可以看到密码?
【发布时间】:2026-01-06 23:35:02
【问题描述】:
  • 产品:安卓应用
  • 编程语言:kotlin

使用 XML 创建 UI 时。有一个密码字段选项,密码对用户可见。 开发者只需设置inputType = TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

在 Jetpack Compose 中有创建 textField() 的选项。然后传入visualTransformation = PasswordVisualTransformation(),让打字变成点。但是,它不会在变成点之前预览字母几秒钟,就像使用 XML 时一样。

想知道是否有一个等效的密码字段的jetpack compose功能,密码对用户可见几秒钟,然后变成一个点。

谢谢

【问题讨论】:

  • inputType = TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 并不意味着预览最新的字符。文本可见,但键盘知道它是密码,以避免自动完成、建议和其他使用文本。

标签: android kotlin android-jetpack-compose android-jetpack-compose-text


【解决方案1】:

inputType 配置显示的键盘类型、可接受的字符和编辑文本的外观。
使用1.0.0 拥有密码字段,您可以使用TextFieldKeyboardType.Password

keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)

还要检查this ticket 以获取更多配置。

要使用带有 visualTransformation 的密码字段(使用掩码字符代替原始文本):

var password by rememberSaveable { mutableStateOf("") }
TextField(
    value = password,
    onValueChange = { password = it },
    label = { Text("Enter password") },
    visualTransformation = PasswordVisualTransformation(),
    keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
)

要使用用户可见的密码字段,只需删除 visualTransformation(并使用默认的VisualTransformation.None):

var password by rememberSaveable { mutableStateOf("") }
TextField(
    value = password,
    onValueChange = { password = it },
    label = { Text("Enter password") },
    keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
)

如果你想在两个选项之间切换:

var passwordVisibility by remember { mutableStateOf(false) }

TextField(
   //...
   keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
   visualTransformation = if (passwordVisibility) VisualTransformation.None else PasswordVisualTransformation(),
)

【讨论】: