Subcompose Layout 何时会支持内部布局(如果有的话)?

时间:2021-03-19 16:20:02

标签: android android-jetpack-compose

我在 androidx.compose.ui.layout.SubcomposeLayout.ktandroidx.compose.ui:ui:1.0.0-beta02 的源代码中看到了这个函数。

    private fun createMeasurePolicy(
        block: SubcomposeMeasureScope.(Constraints) -> MeasureResult
    ): MeasurePolicy = object : LayoutNode.NoIntrinsicsMeasurePolicy(
        error = "Intrinsic measurements are not currently supported by SubcomposeLayout"
    ) {
        ...
    }

当组合项将在子组合项中呈现时,我似乎无法使用内在测量。

作为参考,我正在尝试在 ModalBottomSheet 中使用这样的视图。目的是在工作表中有一个可滚动的视图,并且始终在底部有一个粘性视图(如按钮)。我希望可滚动内容仅占用所需的空间,并且在工作表展开状态下并不总是全屏显示,weight(1f) 确实如此。

Column(
        modifier = Modifier
                .height(IntrinsicSize.Min)
                .wrapContentHeight(Alignment.Bottom),
        verticalArrangement = Arrangement.Bottom
) {
  Column(
          content = sheetContent,
          modifier = Modifier
                  .weight(1f)
                  .wrapContentHeight(Alignment.Bottom)
  )
  Box {
    bottomStickyContent?.let { it() }
  }
}

1 个答案:

答案 0 :(得分:0)

听起来答案是否定的,SubcomposeLayout 不会很快获得内在支持(如果有的话)。

我通过代码更新以使用约束布局解决了这个问题。

ConstraintLayout {
  val (sticky, column) = createRefs()
  Column(
          content = sheetContent,
          modifier = Modifier
                  .constrainAs(column) {
                    top.linkTo(parent.top)
                    bottom.linkTo(sticky.top)
                    height = Dimension.preferredWrapContent
                  }
                  .wrapContentHeight(Alignment.Bottom)
  )
  Box(
          modifier = Modifier
                  .constrainAs(sticky) {
                    bottom.linkTo(parent.bottom)
                  }
  ) {
    bottomStickyContent?.let { it() }
  }
}