我正在尝试使用 jetpack compose 在 Android 中设置背景图像,但图像无法填满整个页面

Posted

技术标签:

【中文标题】我正在尝试使用 jetpack compose 在 Android 中设置背景图像,但图像无法填满整个页面【英文标题】:I am trying to set a background image in Android using jetpack compose but the image cant fill the whole page 【发布时间】:2022-01-01 00:11:07 【问题描述】:
    我想将图像填充到页面的最大尺寸并填充应用栏下方的边缘。 我可以在不使用脚手架的情况下将图像填充到完整背景,但在这种情况下我需要使用脚手架。 截图附上问题以便更好地理解 你可以点击链接查看 enter image description here
@Composable
fun ScaffoldBackground() 

    Scaffold(
        topBar = 
            TopAppBar(
                modifier = Modifier
                    .fillMaxHeight(0.2f)
                    .clip(
                        shape = RoundedCornerShape(bottomEnd = 30.dp, bottomStart = 30.dp)
                    ),

                // Provide Title
                title = 
                    Text(
                        text = "Dashboard",
                    )

                
            )
        ,
    ) 

        Box(
            modifier = Modifier
                .fillMaxSize()
        ) 
            Image(
                modifier = Modifier
                    .fillMaxSize(), 
                painter = painterResource(R.drawable.ic_launcher_background),
                contentDescription = "background_image",
                contentScale = ContentScale.FillBounds
            )


        

    

the image cant fill the the edges of app bar

【问题讨论】:

你想让你的图片放在 topAppBar 后面(图片的一部分会被剪掉)? 是的!!!!但是因为脚手架我们不能这样做 那么不要在顶层使用脚手架。使用盒子。在里面放你的脚手架和图片fillMaxSize 它会给出相同的响应...添加一个框不会改变任何东西 你能分享你的代码吗 【参考方案1】:

我试过这段代码,它工作正常。这里重要的是确保您放入 Scaffold 的内容应该有一些透明区域,否则背景图像将不可见。

Box 
    Image(
        modifier = Modifier.fillMaxSize(),
        painter = painterResource(R.drawable.ic_launcher_background),
        contentDescription = "background_image",
        contentScale = ContentScale.FillBounds
    )
    Scaffold(
        backgroundColor = Color.Transparent,   // Make the background transparent
        topBar = 
            TopAppBar(
                modifier = Modifier
                    .fillMaxHeight(0.2f)
                    .clip(
                        shape = RoundedCornerShape(
                            bottomEnd = 30.dp,
                            bottomStart = 30.dp
                        )
                    ),
                title = 
                    Text(text = "Dashboard")
                
            )
        ,
    ) 
        // Scaffold content
    

【讨论】:

感谢您的帮助...每次我忘记将 backgroundColor = Color.Transparent 添加到脚手架 在将一个活动更改为第二个活动后尝试保存我的编辑文本字段的值,然后在 jetpack compose 中返回到第一个活动,你能帮忙解决这个问题 您能否发布一个单独的问题来添加相关详细信息?

以上是关于我正在尝试使用 jetpack compose 在 Android 中设置背景图像,但图像无法填满整个页面的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack Compose-没有方法签名:错误

如何使用 JetPack Compose 在 LazyColumn 项目中单击导航到详细视图?

Jetpack Compose - 未解决的参考:observeAsState

如何在 jetpack compose 中使用 MotionLayout、MotionScene、ConstraintSet?

Jetpack compose:无法使用 Youtube API

如何在jetpack compose中的网格项目之间添加空格