android 如何在TextField为空时禁用软键盘上的ImeAction/按钮

bbmckpt7  于 2023-06-27  发布在  Android
关注(0)|答案(3)|浏览(85)

我有一个TextFied Composable,包含KeyboardOptionsKeyboardActions

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

TextField与Done Action一起工作,但每当TextField为空时,我需要禁用键盘上的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,
       
    )}

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

91zkwejq

91zkwejq1#

您可以设置输入法的行动对文本的更改编辑文本

editText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() > 0) {
               editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
            } else {
               editText.setImeOptions(EditorInfo.IME_ACTION_NONE);
            }
        }
ztyzrc3y

ztyzrc3y2#

如果值无效,我将imeAction设置为None,如果值有效,则设置为Done/Go。然后将该值插入TextField中的keyboardOptions

// setup the value
val imeAction = if (isValidInput(seekerInfoUiState.value)) {
    ImeAction.Done // or ImeAction.Go
} else {
    ImeAction.None
}

// plug the value and handle the action
TextField(
   keyboardOptions = KeyboardOptions(
    imeAction = imeAction,
   ),
   keyboardActions = KeyboardActions(
     onDone = { // or onGo
        /* do something when imeAction is clicked */
     }

   )
)

祝你一切顺利

ffvjumwh

ffvjumwh3#

这是常规Android中的impossible,因此使用Jetpack Compose也无法解决此任务。
您所能做的就是检查onDone回调中的文本是否有效,如果有效则继续,如果无效则显示错误。

相关问题