[英]How can I programmatically click a Button in Jetpack Compose?
對於android.widget.Button
,我可以使用performClick()
以編程方式模擬點擊。 但我不知道如何在 Jetpack Compose 中做到這一點。 我查看了compose.material
文檔,但至少找不到任何相關信息。
使用此解決方案,您將以編程方式獲得漣漪效應,就像您按下按鈕一樣:
1)創建交互源:
val interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
2)創建協程scope:
val coroutine = rememberCoroutineScope()
3)在您的按鈕中設置交互源:
Button(
onClick = {
vm.myFunction()
},
//important
interactionSource = interactionSource,
.
.
.
)
4)最后從任何地方這樣調用它:
coroutine.launch {
val press = PressInteraction.Press(Offset.Zero)
interactionSource.emit(press)
vm.myFunction()
delay(300)
interactionSource.emit(PressInteraction.Release(press))
}
在撰寫中,您正在創建一個帶有操作的按鈕。 您可以通過操作 function 並以編程方式調用相同的 function。
// you need to remember your callback to prevent extra recompositions.
// pass all variables that may change between recompositions
// as keys instead of `Unit`
val onClickAction = remember(Unit) {
{
// do some action
}
}
LaunchedEffect(Unit) {
// perform action in 1 sec after view appear
delay(1000)
onClickAction()
}
Button(
onClick = onClickAction
) {
Text(text = "Button")
}
在我發現這個問題時, performClick()
通常在SemanticNodeInteraction
object 上按預期工作 - 即使用 Jetpack Compose。
我確實遇到了一個問題,它只在元素當前可見時才起作用,所以我需要先調用performScrollTo()
:
composeTestRule.onNode(...).run {
performScrollTo()
performClick()
}
給你 go
Button(
onClick = {
// here you can perform you action on button click
},
modifier = Modifier
.fillMaxWidth()
.height(55.dp)
.background(
color = WoodSmoke,
shape = RoundedCornerShape(30)
),
colors = ButtonDefaults.buttonColors(backgroundColor =
Color.Transparent),
) {
Text(text = "Sign in", color = Color.White)
}
一個非常簡單的解決方案。
創建一個 state 變量
val verifyNumberOnClick = remember { mutableStateOf(false) }
創建一個私有的 function,可以用作 onClick 的操作。
private fun makeSum(a: Int, b: Int){ Log.e("Atiar", "Sum of a & b: ${a+b}") }
創建if-else
以運行該 function。
if (verifyNumberOnClick.value){ makeSum(5,6) verifyNumberOnClick.value = false }
你完成了。 現在是時候將verifyNumberOnClick
的值更改為true
了。
無論身在何處,您都可以撥打 function。 意味着您可以從任何地方執行 onclick 項任務。
作為示例,您可以從單擊按鈕更改verifyNumberOnClick
的值。
Button(
onClick = {verifyNumberOnClick.value = false}
) {
Text(text = "Button")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.