android onClick在Jetpack Compose中无法正常工作

gv8xihay  于 2023-06-27  发布在  Android
关注(0)|答案(2)|浏览(144)

我试图在Jetpack Compose中使单击按钮显示消息,但它不起作用。好像如果我不按的话。
以下是我尝试过的:

Button(
                onClick = {
                    Toast.makeText(this@MainActivity, "Clicked!", Toast.LENGTH_SHORT).show()
                    Log.d("Auth:Auth:", "Auth: true")
                    //biometricPrompt.authenticate(biometricPromptInfo)
                },
                colors = ButtonDefaults.buttonColors(
                    backgroundColor = androidx.compose.ui.graphics.Color(0xFF03A278),
                    contentColor = androidx.compose.ui.graphics.Color.White
                )
            ) {
                Log.d("Auth:Auth:", "Auth: text")
                Text(getString(R.string.authenticate_button))
            }

显示“文本”上方的logd消息,但不显示“吐司”下方的消息。吐司也看不出来。
另外,当我点击它时,我在Logcat上得到这些消息:Logcat messages

vmdwslir

vmdwslir1#

解决了它,有一个弹出式旋转器挂在周围,搞砸了这一切。

mwngjboj

mwngjboj2#

在Jetpack Compose中,您不能直接使用传统的Android吐司来显示消息。相反,可以使用“合成材质”库提供的Snackbar组件。以下是如何修改代码以使用Snackbar显示消息:
首先,确保您有必要的导入:

import androidx.compose.material.Button
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Snackbar
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp

然后,按如下方式修改Button代码:

@Composable
fun MyButton() {
    val context = LocalContext.current
    val showMessage = remember { mutableStateOf(false) }

    Button(
        onClick = { showMessage.value = true },
        colors = ButtonDefaults.buttonColors(
            backgroundColor = androidx.compose.ui.graphics.Color(0xFF03A278),
            contentColor = androidx.compose.ui.graphics.Color.White
        )
    ) {
        Text(stringResource(R.string.authenticate_button))
    }

    if (showMessage.value) {
        Snackbar(
            action = {
                // Optional: You can add an action button to the Snackbar
                Text("Dismiss", style = MaterialTheme.typography.body2) {
                    showMessage.value = false
                }
            },
            modifier = Modifier.padding(16.dp) // Optional: Add padding to the Snackbar
        ) {
            Text("Clicked!")
        }
    }
}

此外,您可以将MyButton可组合函数放置在@Preview函数中,以在Android Studio的预览窗格中查看预览:

@Preview
@Composable
fun MyButtonPreview() {
    MyButton()
}

相关问题