---
title: "SoftwareKeyboardController"
description: "Provides manual, programmatic control over the software keyboard."
type: "interface"
---
## API Reference

> Source set: Common

```kotlin
public interface SoftwareKeyboardController
```

Provides manual, programmatic control over the software keyboard.

Obtain an instance using [LocalSoftwareKeyboardController](/jetpack-compose/androidx.compose.ui/ui/properties/LocalSoftwareKeyboardController/api). It is commonly used to
programmatically hide the keyboard (e.g., after submitting data to a network, or when executing
custom done/search actions).

## Functions

### show

> Source set: Common

```kotlin
public fun show()
```

Request that the system show a software keyboard.

This request is best effort. If the system can currently show a software keyboard, it will be
shown. However, there is no guarantee that the system will be able to show a software
keyboard. If the system cannot show a software keyboard currently, this call will be silently
ignored.

The software keyboard will never show if there is no composable that will accept text input,
such as a `TextField` when it is focused.
You may find it useful to ensure focus when calling this function.

You do not need to call this function unless you also call `hide`, as the keyboard is
automatically shown and hidden by focus events in the BasicTextField.

Calling this function is considered a side-effect and should not be called directly from
recomposition.

### hide

> Source set: Common

```kotlin
public fun hide()
```

Hide the software keyboard.

This request is best effort, if the system cannot hide the software keyboard this call will
silently be ignored.

Calling this function is considered a side-effect and should not be called directly from
recomposition.

## Code Examples

### SoftwareKeyboardControllerSample

```kotlin
@Sampled
@Composable
fun SoftwareKeyboardControllerSample() {
    val keyboardController = LocalSoftwareKeyboardController.current

    // used to ensure a TextField is focused when showing keyboard
    val focusRequester = remember { FocusRequester() }
    var (text, setText) = remember { mutableStateOf("Close keyboard on done ime action (blue ✔️)") }
    Column(Modifier.padding(16.dp)) {
        BasicTextField(
            text,
            setText,
            keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
            keyboardActions = KeyboardActions(onDone = { keyboardController?.hide() }),
            modifier = Modifier.focusRequester(focusRequester).fillMaxWidth(),
        )
        Spacer(Modifier.height(16.dp))
        Button(
            onClick = {
                focusRequester.requestFocus()
                keyboardController?.show()
            },
            modifier = Modifier.fillMaxWidth(),
        ) {
            Text("Show software keyboard.")
        }
    }
}
```
