如何在单击 Compose Multiplatform 中的其他位置时清除 BasicTextField 的焦点?

Tim*_*Tim 7 kotlin android-jetpack-compose jetbrains-compose compose-multiplatform

我有一个BasicTextFieldJetbrains Compose Multiplatform 桌面版。当我单击它时,文本字段获得焦点并变得可编辑。但是,当我单击应用程序中的其他位置时,焦点不会丢失,并且该字段仍然可以编辑,就像我刚刚单击它一样。

我知道这种行为是正常的并且是故意的。尽管如此,我希望当用户单击其他地方时 TextField 变得不聚焦,无论它是可单击的还是不可单击的可组合项。

我该如何实现这一目标?

Dec*_*ine 11

这是我过去做过的一种方法。

 val keyboardController = LocalSoftwareKeyboardController.current
 val focusManager = LocalFocusManager.current
 val interactionSource = remember { MutableInteractionSource() }
Run Code Online (Sandbox Code Playgroud)

然后我让我的父布局可点击。

Box(modifier = Modifier
       .clickable(
           interactionSource = interactionSource,
           indication = null    // this gets rid of the ripple effect
       ) {
           keyboardController?.hide()
           focusManager.clearFocus(true)
       }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!单击另一个可点击项时仍然没有清晰的焦点,但它对我来说足够好了:) (2认同)