Saltearse al contenido

TextField

MaterialMaterial 3
Imagen del componente TextField - MaterialImagen del componente TextField - Material 3

Los TextField permiten a los usuarios introducir texto a la UI. Suelen aparecer en formularios y cuadros de diálogo.

Estos tienen dos variaciones:

  • FilledTextField
  • OutlinedTextField

Por defecto, los TextField siempre son del tipo FilledTextField.

Implementación

Definición del componente

Terminal window
@Composable
fun TextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
readOnly: Boolean = false,
textStyle: TextStyle = LocalTextStyle.current,
label: (@Composable () -> Unit)? = null,
placeholder: (@Composable () -> Unit)? = null,
leadingIcon: (@Composable () -> Unit)? = null,
trailingIcon: (@Composable () -> Unit)? = null,
isError: Boolean = false,
visualTransformation: VisualTransformation = VisualTransformation.None,
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
keyboardActions: KeyboardActions = KeyboardActions(),
singleLine: Boolean = false,
maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
minLines: Int = 1,
interactionSource: MutableInteractionSource? = null,
shape: Shape = TextFieldDefaults.TextFieldShape,
colors: TextFieldColors = TextFieldDefaults.textFieldColors()
): Unit
AtributoDescripción
valueEl texto que se mostrará en el campo de texto
onValueChangeLa devolución de llamada que se activa cuando se actualiza el texto, pasando el mismo texto actualizado por parámetro
modifierEl modificador de este campo
enabledPermite habilitar o deshabilitar el campo. Cuando es false el campo no se puede ni editar, ni hacer focus, ni copiar su texto
readOnlyControla si el campo es editable o no. Cuando es true, el campo no se puede editar, pero si se puede hacer focus y copiar su texto
textStyleEl estilo que se aplicará al texto: color, tamaño, fondo, etc.
labelEtiqueta opcional que se muestra dentro del campo de texto
placeholderTexto provisional que se muestra cuando el campo de texto está seleccionado y su contenido está vacío
leadingIconImagen opcional que se muestra al inicio del contenedor del campo de texto
trailingIconImagen opcional que se muestra al final del contenedor del campo de texto
isErrorIndica si el valor del campo de texto está mal o no. Cuando es true pinta de rojo algunas partes del contenedor
visualTransformationTransforma la representación visual del texto. Se suele usar en campos de tipo contraseña para ocultar el texto
keyboardOptionsEspecifica el tipo de texto a escribir o tipo de teclado a mostrar, phone, email, number, etc. También se utiliza para otras funciones
keyboardActionsSe utiliza para definir la acción y ejecutar cuando se presione enter en el teclado. En este caso es una búsqueda
singleLineIndica si el texto debe ocupar una sola línea. Cuando es true, el campo de texto se convierte en un campo con scroll horizontal en vez de ajustarse a varias líneas
maxLinesIndica el número máximo de líneas de texto visibles
minLinesIndica el número mínimo de líneas de texto visibles
interactionSourceSirve para permitir agregar interacciones nuevas al flujo y para controlar las interacciones del usuario
shapeDefine la forma del contenedor del campo de texto
colorsColores usados para pintar el los elementos del campo de texto (text, label, placeholder, leadingIcon, trailingIcon, etc.)

Ejemplos

TextField sencillo con una sola línea

Imagen del componente TextField - Material
Terminal window
var text by rememberSaveable { mutableStateOf("") }
TextField(
value = text,
onValueChange = { text = it },
label = { Text("Label") },
singleLine = true
)

TextField con placeholder

Imagen del componente TextField - Material
Terminal window
var text by rememberSaveable { mutableStateOf("") }
TextField(
value = text,
onValueChange = { text = it },
label = { Text("Email") },
placeholder = { Text("example@gmail.com") }
)

TextField con leadingIcon y trailingIcon

Imagen del componente TextField - Material
Terminal window
var text by rememberSaveable { mutableStateOf("") }
TextField(
value = text,
onValueChange = { text = it },
label = { Text("Label") },
leadingIcon = { Icon(Icons.Filled.Favorite, contentDescription = "Localized description") },
trailingIcon = { Icon(Icons.Filled.Info, contentDescription = "Localized description") }
)

TextField con un mensaje adicional debajo

Imagen del componente TextField - Material
Terminal window
var text by rememberSaveable { mutableStateOf("") }
Column {
TextField(
value = text,
onValueChange = { text = it },
label = { Text("Label") }
)
Text(
text = "Helper message",
color = MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.medium),
style = MaterialTheme.typography.caption,
modifier = Modifier.padding(start = 16.dp)
)
}

TextField para gestionar contraseña

Imagen del componente TextField - Material
Imagen del componente TextField - Material
Terminal window
var password by rememberSaveable { mutableStateOf("") }
var passwordHidden by rememberSaveable { mutableStateOf(true) }
TextField(
value = password,
onValueChange = { password = it },
singleLine = true,
label = { Text("Enter password") },
visualTransformation =
if (passwordHidden) PasswordVisualTransformation() else VisualTransformation.None,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
trailingIcon = {
IconButton(onClick = { passwordHidden = !passwordHidden }) {
val visibilityIcon =
if (passwordHidden) Icons.Filled.Visibility else Icons.Filled.VisibilityOff
// Please provide localized description for accessibility services
val description = if (passwordHidden) "Show password" else "Hide password"
Icon(imageVector = visibilityIcon, contentDescription = description)
}
}
)