为什么我在使用 Jetpack Compose TextField 时遇到错误?
Why am I getting an error using Jetpack Compose TextField?
编辑
我仍在努力让它发挥作用。我现在有,但在标签的 Text
上出现错误。我在一个标有@Composable 的函数中。 TextField
也有类似的问题。
@Composable invocations can only happen from the context of a @Composable function
TextField(
value = "Text(text = \"\")",
onValueChange = { },
label = { Text("Label") },// copied from android developer website
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
}
编辑结束
我正在尝试制作一个登录屏幕,我正在使用 TextField
来允许用户输入电子邮件和密码。我看不出我所拥有的有什么问题,但我收到了一个错误
None of the following functions can be called with the arguments
supplied.
这是我的代码的一部分:
Row(Modifier.padding(dimensionResource(id = R.dimen.container_edge_padding))) {
Text(
text = "${stringResource(id = R.string.email)}} : ",
Modifier
.padding(0.dp) // equivalent to padding inside
.padding(end = dimensionResource(id = R.dimen.child_edge_padding)) // second padding acts as to margin putting space on the inside of the item
)
TextField(
value = "",
placeholder = stringResource(id = R.string.login_email_hint),
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
}
当我将鼠标悬停在它上面时,这就是我所看到的。
使用参数的名称,我使用哪个参数或它们相对于声明的位置无关紧要。如果我这样更改它,因为前 3 个参数是值、占位符、修饰符,它会起作用。但两者都应该有效,因为命名参数就是这样工作的。提供默认值允许这样做。我能让它工作的唯一方法是按照声明的顺序使用参数。这意味着如果我想使用 placeHolder
我必须在它之前使用每个参数的名称,按照它声明的顺序,以便使用它。唯一必须正确声明的是 value
和 onValueChange
,因为它们是唯一没有声明默认值的两个。
TextField(
value = "",
onValueChange = {},
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
占位符参数有一点您尝试使用的另一种类型:
placeholder: @Composable (() -> Unit)? = null,
原因:它不能使用 String
而不是 @Composable (() -> Unit)?
试试下面的代码,它会对你有所帮助。
TextField(
value = "ab",
onValueChange ={},
modifier = Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding)),
enabled = true,
readOnly = false,
textStyle = TextStyle.Default,
placeholder = {stringResource(id = R.string.login_email_hint)},
visualTransformation = VisualTransformation.None,
keyboardOptions = KeyboardOptions.Default,
keyboardActions = KeyboardActions(onDone = { }),
maxLines = 1
)
荧光笔指出,TextField
有两种变体。您,因为您将第一个参数值作为字符串提供,所以正在使用第二个变体。第二个变体调用 (String) -> Unit
,即 onValueChange
参数。你自己说必须提供这个,你自己没有在你的代码中提供它(片段 1)。这就是为什么它与变体不匹配的原因
我终于像@Dharmender Manral 说的那样做到了
TextField(
value = "",
onValueChange = { },
Modifier
.padding(0.dp)
.padding(start = dimensionResource(id = R.dimen.child_edge_padding)),
enabled = true,
readOnly = false,
textStyle = LocalTextStyle.current,
label = { Text("Label") },
placeholder = { Text(text = stringResource(id = R.string.login_password_hint)) }
)
然后我就可以做到这一点
TextField(
value = "",
onValueChange = { },
Modifier
.padding(0.dp)
.padding(start = dimensionResource(id = R.dimen.child_edge_padding)),
// enabled = true,
// readOnly = false,
// textStyle = LocalTextStyle.current,
label = { Text("Label") },
placeholder = { Text(text = stringResource(id = R.string.login_password_hint)) }
)
唯一的问题是 `Modifier` 有一个默认参数,所以它是可选的,应该可以按任何顺序放置。我得到这个工作我能够切换 `placeHolder` 和 `label` 所以 `placeHolder` 是第一个并且它仍然像它应该的那样工作。我觉得这是某个地方的错误,因为一旦我将 `modifier` 移动到不同的位置,它就会再次崩溃。但是因为 `modifier` 有一个默认参数,它是可选的,应该可以移动到任何位置,就像我使用 `placeholder` 和 `label` 所做的那样。
因此,只要前 3 个参数位于正确的位置并以正确的顺序,其他参数就可以像您期望的默认参数一样工作,因此有效与无效之间的唯一区别。让他们处于任何位置。不确定为什么它不适用于 modifier
.
编辑
我仍在努力让它发挥作用。我现在有,但在标签的 Text
上出现错误。我在一个标有@Composable 的函数中。 TextField
也有类似的问题。
@Composable invocations can only happen from the context of a @Composable function
TextField(
value = "Text(text = \"\")",
onValueChange = { },
label = { Text("Label") },// copied from android developer website
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
}
编辑结束
我正在尝试制作一个登录屏幕,我正在使用 TextField
来允许用户输入电子邮件和密码。我看不出我所拥有的有什么问题,但我收到了一个错误
None of the following functions can be called with the arguments supplied.
这是我的代码的一部分:
Row(Modifier.padding(dimensionResource(id = R.dimen.container_edge_padding))) {
Text(
text = "${stringResource(id = R.string.email)}} : ",
Modifier
.padding(0.dp) // equivalent to padding inside
.padding(end = dimensionResource(id = R.dimen.child_edge_padding)) // second padding acts as to margin putting space on the inside of the item
)
TextField(
value = "",
placeholder = stringResource(id = R.string.login_email_hint),
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
}
当我将鼠标悬停在它上面时,这就是我所看到的。
使用参数的名称,我使用哪个参数或它们相对于声明的位置无关紧要。如果我这样更改它,因为前 3 个参数是值、占位符、修饰符,它会起作用。但两者都应该有效,因为命名参数就是这样工作的。提供默认值允许这样做。我能让它工作的唯一方法是按照声明的顺序使用参数。这意味着如果我想使用 placeHolder
我必须在它之前使用每个参数的名称,按照它声明的顺序,以便使用它。唯一必须正确声明的是 value
和 onValueChange
,因为它们是唯一没有声明默认值的两个。
TextField(
value = "",
onValueChange = {},
Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding))
)
占位符参数有一点您尝试使用的另一种类型:
placeholder: @Composable (() -> Unit)? = null,
原因:它不能使用 String
而不是 @Composable (() -> Unit)?
试试下面的代码,它会对你有所帮助。
TextField(
value = "ab",
onValueChange ={},
modifier = Modifier
.padding(0.dp)
.padding(end = dimensionResource(id = R.dimen.child_edge_padding)),
enabled = true,
readOnly = false,
textStyle = TextStyle.Default,
placeholder = {stringResource(id = R.string.login_email_hint)},
visualTransformation = VisualTransformation.None,
keyboardOptions = KeyboardOptions.Default,
keyboardActions = KeyboardActions(onDone = { }),
maxLines = 1
)
荧光笔指出,TextField
有两种变体。您,因为您将第一个参数值作为字符串提供,所以正在使用第二个变体。第二个变体调用 (String) -> Unit
,即 onValueChange
参数。你自己说必须提供这个,你自己没有在你的代码中提供它(片段 1)。这就是为什么它与变体不匹配的原因
我终于像@Dharmender Manral 说的那样做到了
TextField(
value = "",
onValueChange = { },
Modifier
.padding(0.dp)
.padding(start = dimensionResource(id = R.dimen.child_edge_padding)),
enabled = true,
readOnly = false,
textStyle = LocalTextStyle.current,
label = { Text("Label") },
placeholder = { Text(text = stringResource(id = R.string.login_password_hint)) }
)
然后我就可以做到这一点
TextField(
value = "",
onValueChange = { },
Modifier
.padding(0.dp)
.padding(start = dimensionResource(id = R.dimen.child_edge_padding)),
// enabled = true,
// readOnly = false,
// textStyle = LocalTextStyle.current,
label = { Text("Label") },
placeholder = { Text(text = stringResource(id = R.string.login_password_hint)) }
)
唯一的问题是 `Modifier` 有一个默认参数,所以它是可选的,应该可以按任何顺序放置。我得到这个工作我能够切换 `placeHolder` 和 `label` 所以 `placeHolder` 是第一个并且它仍然像它应该的那样工作。我觉得这是某个地方的错误,因为一旦我将 `modifier` 移动到不同的位置,它就会再次崩溃。但是因为 `modifier` 有一个默认参数,它是可选的,应该可以移动到任何位置,就像我使用 `placeholder` 和 `label` 所做的那样。
因此,只要前 3 个参数位于正确的位置并以正确的顺序,其他参数就可以像您期望的默认参数一样工作,因此有效与无效之间的唯一区别。让他们处于任何位置。不确定为什么它不适用于 modifier
.