【问题标题】:Content padding parameter it is not used未使用的内容填充参数
【发布时间】:2022-06-20 13:01:24
【问题描述】:

我最近开始使用 Jetpack Compose。我有以下可组合:

@Composable
fun SearchScreen(navController: NavHostController) {
    Scaffold(
        topBar = { SearchBar() },
        content = {
            Column(modifier = Modifier
                .fillMaxSize()
                .verticalScroll(rememberScrollState())) {
                Text(stringResource(id = R.string.genreFilter))
                Row(
                    modifier = Modifier
                        .horizontalScroll(rememberScrollState()),
                    horizontalArrangement = Arrangement.spacedBy(4.dp)
                ) {
                    // some nested Composables
                }

            }},
    )
}

但是按照原样使用此代码,content = {...} 中的整个代码都用红色下划线表示Jetpack Compose: Content padding parameter it is not used。我已经在this Stackoverflow Post 中读到,实际上,PaddingValues 仅在设置了bottomBar 时才在脚手架中提供,这显然不是这里的情况。所以我不明白为什么我会收到这个错误。

注意:该应用程序确实使用了BottomNavigation,但不在我上面显示的Composable 中。难不成这里还在以某种方式传播?

【问题讨论】:

  • 我复制粘贴了您的可组合文件,但无法重现带下划线的错误。我还将 content 参数作为尾随 lambda 并且代码工作正常。
  • 有趣。它可能与我的撰写版本有关吗?我正在使用compose_version = '1.2.0-alpha08,因为我需要FilterChip Composable。你用的是哪个版本?
  • 是的,我在composeVersion = "1.1.1" 上,我在下面看到@Pylyp Dukhov 的回答,它澄清了差异。

标签: android android-jetpack-compose


【解决方案1】:

由于 Compose 1.2.0 需要使用填充参数,传递到 Scaffold content 可组合。您应该将其应用到content 中的最顶层容器/视图:

content = { padding ->
    Column(
        modifier = Modifier
            .padding(padding)
    // ...

这样做是为了防止布局问题,例如,当脚手架有一个底栏时,如果不使用这个填充部分,您的视图将位于该栏下方。

您始终可以使用@SuppressLint("UnusedMaterialScaffoldPaddingParameter") 来抑制它,但我建议您仅在您确切知道自己在做什么时才这样做。

【讨论】:

  • 谢谢,这就解释了!但是,一个后续问题是,如果我将NavHost 设置为Scaffold 的子级,我是否只需将填充直接设置为NavHost,或者我是否需要以某种方式将此填充传递给单独的可组合将显示在NavHost?
  • @BenjyTec 你应该把它应用到最顶层的容器上,在这种情况下是NavHost
  • 我已将此应用到我最顶层的容器中,但仍然出现错误,抑制它似乎是摆脱它的唯一方法
  • @alfietap 显示代码你是如何做到的,例如使用gist。如果您的代码是正确的并且它不起作用,它应该可以肯定地工作 - 它应该被报告为 IDE 错误
  • @alfietap 它没有向我显示错误。确保您使用的是最新的 IDE 和 android gradle 插件。尝试使用相同的代码创建一个新项目,看看是否可以重现它。如果是,report 包括此示例项目、您的 IDE 版本和示例项目。
【解决方案2】:

我在 alpha 版本中看到了一个错误,我正在使用 SmallTopAppBar() Scaffold 没有为两个可组合的组件提供填充,它们位于彼此之上。 更新之后,才意识到这个 bug 已经修复,并且 Scaffold 本身有一个填充,所以可组合组件不再位于其他组件之上。

用法:

  Scaffold(topBar = { AppBar() }) { paddingValues ->
  AnyComposable(modifier = Modifier.padding(paddingValues)){

  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多