android 导航到新屏幕后,编写文本字段光标会停留一段时间

qyswt5oh  于 2023-01-19  发布在  Android
关注(0)|答案(1)|浏览(102)

在TopAppBar中设置TextField后,我遇到了两个问题:
1.键盘折叠后文本字段获得焦点。当文本字段没有被触发时,它看起来像图片1。当我按下它(它是焦点)时,键盘显示出来,tesxfield看起来像图片2。如果我手动折叠键盘,文本字段保持图片2的外观。我希望它能回到图片1的外观。

1.当我切换到一个新的屏幕时,编辑光标(大头针形状的东西)仍然在屏幕上。pic3显示光标。颜色与背景相同。我将改变它。当我切换到另一个屏幕时,它仍然在那里,如pic 4所示。它只持续一瞬间,然后消失。但它在那里。

对于第一个问题,我想我一定是漏掉了一些参数。对于第二个问题,我没有任何想法。这是一个编写错误吗?

@Composable
fun SearchBar() {
    var text by remember { mutableStateOf("") }
    Box(
        modifier = Modifier
            .height(70.dp)
            .fillMaxWidth()
            .background(MaterialTheme.colors.primary),
        contentAlignment = Alignment.BottomCenter
    ) {
        TextField(
            leadingIcon = {
                Icon(imageVector = Icons.Default.Search, contentDescription = null)
            },
            placeholder = {
                Text(
                    "find more...",
                    color = Color.White
                )
            },
            shape = RectangleShape,
            colors = TextFieldDefaults.textFieldColors(
                textColor = Color.White,
                backgroundColor = MaterialTheme.colors.primary,
                focusedIndicatorColor = Color.White,
                unfocusedIndicatorColor = Color.Gray,
                disabledIndicatorColor = Color.Black
                ),
            value = text,
            singleLine = true,
            onValueChange = { text = it },
            modifier = Modifier
                .padding( bottom = 10.dp)
                .size(360.dp,60.dp),
        )
    }
}
58wvjzkj

58wvjzkj1#

好的,谢谢你的额外细节,试试这个!
对于第1)部分,可以将以下代码添加到TextField以删除焦点:

val focusManager = LocalFocusManager.current

TextField(
    ...
    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),      
    keyboardActions = KeyboardActions(onDone = {     
        keyboardController?.hide()
        focusManager.clearFocus(force = true)
    }),
)

注意Done选项会在键盘上显示一个小复选框,你可以用它来关闭键盘,然后这段代码会移除焦点。我希望在手动关闭键盘时也会调用onDone
在第2部分中,我会重复使用这种方法,这听起来像是一个bug,但基本上我会尝试在离开屏幕之前,从任何你正在做导航的地方调用LocalFocusManager.current.clearFocus(force = true),以迫使这个东西消失。
希望这有帮助!

相关问题