我正在使用Jetpack compose 1.0.0-alpha07。我制作了一个包含两个TextField的登录界面,并使用其他组成部分进行自定义。
然而,在keyboardOptions中设置ImeAction似乎不起作用。例如,ImeAction.Next不能将焦点移动到下一个TextField。我认为我应该做一些事情来使其成为可能,但是没有任何文档或文章甚至简要介绍过ImeOptions。以下是我屏幕的代码:
Login组件:
然而,在keyboardOptions中设置ImeAction似乎不起作用。例如,ImeAction.Next不能将焦点移动到下一个TextField。我认为我应该做一些事情来使其成为可能,但是没有任何文档或文章甚至简要介绍过ImeOptions。以下是我屏幕的代码:
Login组件:
EmailEdit(onChange = { email.value = it })
PasswordEdit(onChange = { password.value = it })
EmailEdit:
@Composable
fun EmailEdit(onChange: (String) -> Unit) {
val t = remember { mutableStateOf("") }
TextField(
value = t.value,
onValueChange = { value ->
t.value = value
onChange(value)
},
leadingIcon = { Icon(asset = Icons.Default.Email) },
label = { Text(text = "Email") },
maxLines = 1,
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Next, // ** Go to next **
keyboardType = KeyboardType.Email
),
visualTransformation = VisualTransformation.None
)
} errorHint = "Not a valid email"
)
}
PassEdit:
@Composable
fun PasswordEdit(onChange: (String) -> Unit) {
val t = remember { mutableStateOf("") }
TextField(
value = t.value,
onValueChange = { value ->
t.value = value
onChange(value)
},
leadingIcon = { Icon(asset = Icons.Default.Security) },
label = { Text(text = "Password") },
maxLines = 1,
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Done, // ** Done. Close the keyboard **
keyboardType = KeyboardType.Text
),
visualTransformation = PasswordVisualTransformation()
)
}
要执行 Done
和 Next
,我需要添加什么代码?
java.lang.IllegalStateException: FocusRequester未初始化。其中一个原因是您在构建期间请求了焦点更改。不应该在构建期间创建焦点请求器,而应该响应某些事件来创建它们。
- YupikeyboardActions
和手动焦点管理。KeyboardOptions(imeAction = ImeAction.Next)
就足以获得正确的行为。 - gmk57