我正在try 重叠两个不同的compose元素.每当出现错误消息时,我都希望在顶部显示toast类消息.对于如此简单的用例,我不想使用第三方库.我计划在所有其他可组合屏幕中使用toast来显示错误消息.下面是我想要实现的布局

enter image description here

所以我想要实现一条 cogo toast 消息,上面写着"无效的PIN,请重试".

@Composable
fun MyToast(title: String) {
    Card(
        modifier = Modifier
            .absoluteOffset(x = 0.dp, y = 40.dp)
            .background(
                color = MaterialTheme.colors.primaryVariant,
                shape = RoundedCornerShape(10.dp)
            ), elevation = 20.dp
    ) {
        Row(
            modifier = Modifier
                .background(color = MaterialTheme.colors.primaryVariant)
                .padding(12.dp),
            horizontalArrangement = Arrangement.Start,
            verticalAlignment = Alignment.CenterVertically
        ) {
            Image(
                painter = painterResource(id = R.drawable.error_circle),
                contentDescription = title
            )
            Text(
                text = title,
                fontFamily = FontFamily(Font(R.font.inter_medium)),
                fontSize = 12.sp,
                color = MaterialTheme.colors.primary,
                modifier = Modifier.padding(horizontal = 10.dp)
            )
        }
    }

}

我的屏幕可组合如下

@Composable
fun Registration(navController: NavController, registrationViewModel: RegistrationViewModel) {
Scaffold() {
       Box(){
           MyToast(
                        title = "Invalid pin, please try again"
                    )
          Column() {
              //my other screen components
          }  
        }
}

稍后我会将AnimatedVisibility修改器添加到MyToast Composable中.首先,我需要将我的Toast覆盖在所有其他元素上,但不知何故,我的Toast是不可见的

推荐答案

如果您希望Box的子项覆盖/重叠其同级项,则应将其放在代码的最后部分

Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center
) {

    Box(
        modifier = Modifier.background(Color.Red).size(150.dp)
    )

    // your Toast
    Box(
        modifier = Modifier.background(Color.Green).size(80.dp)
    )
}

enter image description here

所以如果我把绿色的盒子放在更大的红色盒子前面,像这样

Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center
) {

    // your Toast
    Box(
        modifier = Modifier.background(Color.Green).size(80.dp)
    )

    Box(
        modifier = Modifier.background(Color.Red).size(150.dp)
    )
}

绿色的盒子将隐藏在红色的盒子后面

enter image description here

Android相关问答推荐

我遇到了一个HashMaps对象没有存储在Firebase数据库中的问题.HashMap的一个对象put方法未被存储

如何制作带有图标和文本的Fab

Android Studio中的Kotlin版本不兼容错误:需要元数据1.9.0,但找到1.6.0

try 用Jetpack Compose理解视图模型和导航

为什么Kotlin允许将非空值类型化为可空类型,但又将其视为非空值?

如何在 Jetpack Compose LazyColumn 中将项目分组在一起,例如卡片

使用 Jetpack Compose 在 Android TV 上启用系统声音

如何在每次显示可组合项时执行代码(并且只执行一次)

Jetpack Compose 如何使一个项目相对于另一个项目垂直居中

为什么@PrimaryKey val id: Int? = null 在创建 Room 实体时有效吗?

发布 MAUI 应用程序时出现遇到重复程序集错误

如何让这个三角形指示器在 android jetpack compose 中旋转和移动?

Koin Android-KMM:我有嵌套范围但注入不起作用

使用 Dagger Hilt 获取接口的所有实例

是什么让 Android Studio 中的按钮变成紫色?加上新手的其他奇怪行为

删除一对多关系室 Kotlin 中的所有值

Android活动系统导航栏 colored颜色 ?

Jetpack Compose Material3 - switch 标签

Android:在模块 jetified-play-services-measurement 和 jetified-play-services-measurement-impl 中发现重复类

如何让用户与任意应用程序共享文件?