[英]How to manage TextField focus after enable/disable the TextField in jetpack compose?
我正在使用 TextField,并且遇到了一些关于焦点的问题。
禁用所有TextField,仅启用第一个。 当尝试启用其他 TextField 时,它失去了焦点,我们如何才能重新获得焦点? Screenshot_20220602_121247 这是我的布局:-
启用 TextField 时如何以编程方式转移焦点?
这是我用来启用和禁用 TextField 的代码片段。
fun enabledDisabledTextField(
enteredValues: MutableList<String>,
index: Int,
isEnabled: Boolean): Boolean {
var enabled = isEnabled
val isFirstTime = enteredValues[0].isEmpty()
if (isFirstTime) {
if (enteredValues[index].isEmpty()) {
if (index == 0) {
enabled = true
}
if (index > 0) {
enabled = false
}
}
} else {
if (enteredValues[index].isEmpty()) {
enabled = true
}
if (enteredValues[index].isNotEmpty()) {
enabled = false
}
if (index == enteredValues.size - 1) {
enabled = true
}
}
return enabled
}
在处理焦点管理时,我还没有尝试过这段代码,但是Modifier
公开了一个函数,您可以在其中管理一些焦点属性,尽管我不太确定这是否可行,以及是否需要显式提供每个Box
的子对象上的FocusRequster
对象
val focusRequester = remember { FocusRequester.Default }
Box(modifier = Modifier
.focusProperties {
// you might be able to switch focus here
this.next.requestFocus()
}
) {
// your text field 1
TextField(
modifier = Modifier
.focusRequester(focusRequester)
)
// your text field 2
TextField(
modifier = Modifier
.focusRequester(focusRequester)
)
// your text field 3
TextField(
modifier = Modifier
.focusRequester(focusRequester)
)
}
FocusManager
的moveFocus
功能也提供了一些便利
val focusManager = LocalFocusManager.current
focusManager.moveFocus(FocusDirection.Next)
//or
focusManager.moveFocus(FocusDirection.Right)
猜测您的代码/逻辑,调用 textfield 的Modifier
上提供的focusRequester
,我再次不确定您是否必须创建一个FocusRequester
list
,并且它们中的每一个都将提供给您的每个TextField
SideEffect {
// I'm assuming some validation will run regarding the enabling of a textfield of yours
if (someStateHandler[index].shouldBeEnabled) {
focusRequester.requestFocus()
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.