Skip to content

TextField

The TextField component provides text input functionality with extensive customization options including different input types, sizes, validation states, and keyboard configurations. It supports single-line and multi-line input.

Usage

Basic TextField

var text by remember { mutableStateOf("") }

TextField(
    text = text,
    onValueChanged = { text = it },
    label = "Enter text",
    placeholderText = "Type here..."
)

TextField with Different Types

var email by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }

TextField(
    text = email,
    onValueChanged = { email = it },
    label = "Email",
    type = TextFieldType.EMAIL,
    placeholderText = "your@email.com"
)

TextField(
    text = password,
    onValueChanged = { password = it },
    label = "Password",
    type = TextFieldType.PASSWORD_HIDDEN,
    placeholderText = "Enter password"
)

TextField Sizes

TextField(
    text = "",
    onValueChanged = { },
    label = "Small",
    size = TextFieldSize.SMALL,
    placeholderText = "Small field"
)

TextField(
    text = "",
    onValueChanged = { },
    label = "Regular",
    size = TextFieldSize.REGULAR,
    placeholderText = "Regular field"
)

TextField(
    text = "",
    onValueChanged = { },
    label = "Big",
    size = TextFieldSize.BIG,
    placeholderText = "Big field"
)

Multi-line TextField

var description by remember { mutableStateOf("") }

TextField(
    text = description,
    onValueChanged = { description = it },
    label = "Description",
    placeholderText = "Enter detailed description...",
    singleLine = false
)

Search TextField

var searchQuery by remember { mutableStateOf("") }

TextField(
    text = searchQuery,
    onValueChanged = { searchQuery = it },
    label = "Search",
    type = TextFieldType.SEARCH,
    placeholderText = "Search for items..."
)

Number Input

var phoneNumber by remember { mutableStateOf("") }

TextField(
    text = phoneNumber,
    onValueChanged = { phoneNumber = it },
    label = "Phone Number",
    type = TextFieldType.NUMBER,
    placeholderText = "+1 (555) 123-4567"
)

TextField States

// Enabled field
TextField(
    text = "Enabled text field",
    onValueChanged = { },
    label = "Enabled",
    enabled = true
)

// Disabled field
TextField(
    text = "Disabled text field",
    onValueChanged = { },
    label = "Disabled",
    enabled = false
)

TextField with Capitalization

TextField(
    text = "",
    onValueChanged = { },
    label = "Name",
    capitalization = KeyboardCapitalization.Words,
    placeholderText = "First Last"
)

TextField(
    text = "",
    onValueChanged = { },
    label = "Sentence",
    capitalization = KeyboardCapitalization.Sentences,
    placeholderText = "Start with capital letter"
)

TextField with IME Actions

TextField(
    text = firstName,
    onValueChanged = { firstName = it },
    label = "First Name",
    imeAction = ImeAction.Next,
    onValueChanged = { firstName = it }
)

TextField(
    text = lastName,
    onValueChanged = { lastName = it },
    label = "Last Name",
    imeAction = ImeAction.Done,
    onValueChanged = { lastName = it }
)

Form Example

Column(
    verticalArrangement = Arrangement.spacedBy(16.dp)
) {
    TextField(
        text = name,
        onValueChanged = { name = it },
        label = "Full Name",
        placeholderText = "Enter your name"
    )

    TextField(
        text = email,
        onValueChanged = { email = it },
        label = "Email",
        type = TextFieldType.EMAIL,
        placeholderText = "your@email.com"
    )

    TextField(
        text = message,
        onValueChanged = { message = it },
        label = "Message",
        placeholderText = "Enter your message...",
        singleLine = false
    )
}