Van*_*Num 3 search android kotlin android-jetpack android-jetpack-compose
我正在尝试添加一个单击时打开搜索和键盘的按钮。
像这样的东西:
但我收到一个错误
FocusRequester is not initialized. Here are some possible fixes:
1. Remember the FocusRequester: val focusRequester = remember { FocusRequester() }
2. Did you forget to add a Modifier.focusRequester() ?
3. Are you attempting to request focus during composition? Focus requests should be made in
response to some event. Eg Modifier.clickable { focusRequester.requestFocus() }
Run Code Online (Sandbox Code Playgroud)
我得出的结论是,这是由于动画可见性造成的,因为没有它一切都会正常。也就是说,当按钮和搜索最初都可见时,一切正常。
我想光标无处可立,因为它没有立即更新,但我不知道还能怎么做
我的代码:
topBar = {
TopAppBar(
actions = {
// val keyboardController = LocalSoftwareKeyboardController.current //val focusRequester = remember { FocusRequester() }
var visibleSearchBar by remember {
mutableStateOf(false)
}
var visiblecurrentSearch by remember {
mutableStateOf(true)
}
val state = remember { mutableStateOf(TextFieldValue("")) }
AnimatedVisibility(visible = visiblecurrentSearch) {
IconButton(onClick = {
visibleSearchBar = true
visiblecurrentSearch = false
//focusRequester.requestFocus()
//keyboardController?.show()
}) {
Icon(painter = painterResource(id = R.drawable.ic_baseline_search_24),
contentDescription = "search")
}
}
AnimatedVisibility(visible = visibleSearchBar) {
TextField(
value = state.value,
onValueChange = { value ->
state.value = value
},
enabled = true,
shape = RoundedCornerShape(25.dp),
modifier = Modifier
//.focusRequester(focusRequester)
.fillMaxWidth()
.padding(end = 10.dp)
.scale(scaleX = 1F, scaleY = 0.9F),
textStyle = TextStyle(color = Color.Black),
placeholder = {
Text(
text = "Search",
fontSize = 14.sp,
)
},
keyboardActions = KeyboardActions(
onDone = {
//movie = list
}
),
leadingIcon = {
Icon(
Icons.Default.Search,
contentDescription = "",
modifier = Modifier
.size(20.dp)
)
},
trailingIcon = {
IconButton(
onClick = {
state.value =
TextFieldValue("") =
visibleSearchBar = false
visiblecurrentSearch = true
}
) {
Icon(
Icons.Default.Close,
contentDescription = "",
modifier = Modifier
.size(20.dp)
)
}
},
singleLine = true,
colors = TextFieldDefaults.textFieldColors(
textColor = Color.Black,
cursorColor = Color.Black,
leadingIconColor = Color.Black,
trailingIconColor = Color.Black,
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
disabledIndicatorColor = Color.Black
)
)
}
},
title = {
},
navigationIcon = {
IconButton(onClick = {}) {
Icon(painter = painterResource(id = R.drawable.ic_baseline_menu_24),
contentDescription = "menu")
}
},
backgroundColor = Color.White,
contentColor = Color.Black,
elevation = 3.dp
)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用副作用来请求焦点。
就像是:
val focusRequester = remember { FocusRequester() }
LaunchedEffect(visibleSearchBar){
if (visibleSearchBar)
focusRequester.requestFocus()
}
AnimatedVisibility(visible = visibleSearchBar) {
TextField(
//...
modifier = Modifier
.focusRequester(focusRequester)
.fillMaxWidth()
.padding(end = 10.dp)
.scale(scaleX = 1F, scaleY = 0.9F),
//...
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |