SoftwareKeyboardController


Provide software keyboard control.

Summary

Public functions

Unit

Hide the software keyboard.

Cmn
Unit

Request that the system show a software keyboard.

Cmn

Public functions

hide

fun hide(): Unit

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.

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp

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.")
    }
}

show

fun show(): Unit

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.

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp

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.")
    }
}