当文本字段为空时如何禁用软键盘上的 ImeAction/按钮

Fan*_*dez 5 android android-jetpack-compose

我有这个 TextFied 可组合项,同时包含KeyboardOptionsKeyboardActions

@Composable
fun TodoInputText(...) {
    val keyboardController = LocalSoftwareKeyboardController.current
    TextField( ....
        onValueChange = onTextChanged,
        keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Done),
        keyboardActions = KeyboardActions(onDone = {
            onImeAction()
            keyboardController?.hide()
        }))}
Run Code Online (Sandbox Code Playgroud)

TextField 正在与 Done Action 配合使用,但只要 TextFied 为空,我就需要在键盘上禁用 Done ImeAction,如此 GIF 所示

在此输入图像描述

我已经提取了一个状态来检查 TextField 是否为空。

@Composable
fun TodoItemEntryInput(...) {

    //hold state for TextField
    val (text, setText) = remember { mutableStateOf("") }

    val isTextBlank = text.isNotBlank()

    //declare lambda function submit that handles  a submit event when done is pressed
    val submitAction = { .... }

    TodoItemInput(
        text = text,
        onTextChange = setText,
        submitAction = submitAction,
       
    )}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,每当文本为空时,如何使用isTextBlank状态来禁用或灰显 Done ImeAction。这是为了避免用户输入空白文本时出现错误 - 我发现输入验证对于这种情况不是非常理想。

Phi*_*hov 3

这在常规 Android 中是不可能的,因此使用 Jetpack Compose 也无法解决此任务。

您所能做的就是检查回调中的文本是否onDone有效,如果有效则继续,如果无效则显示错误。

  • @Tonnie 当然,您可以在 [问题跟踪器](https://issuetracker.google.com/issues/new?component=612128) 上创建问题 (2认同)