当前位置: 首页 > 知识库问答 >
问题:

如果有的话,子撰写布局何时支持内在布局?

燕鸿波
2023-03-14

我在<code>androidx.compose.ui.layout.SubcomposeLayout的源代码中看到了这个函数。kt在androidx.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"
    ) {
        ...
    }

当composable将在subcomposable中呈现时,看起来我不能使用内部度量。

作为参考,我试图在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个答案

臧亦
2023-03-14

听起来答案是否定的,SubcomiceLayout不会很快获得Intrinsic支持,如果有的话。

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

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() }
  }
}
 类似资料:
  • 我正在尝试实现类似于Google Play Music的“立即收听”布局。我在网上找到的每一个例子都是一个简单的。我正在努力实现更复杂的目标。差不多 整个布局(减去工具栏)是否可以是一个包含两个或多个RecyclerView的?差不多 最终,我想要实现的是一个如下的布局,并保持良好的性能。

  • 我不知道如何移动和想象到窗口中的不同位置。我读过关于BorderLayout的文章,但我不知道如何实现它。我希望图像位于文本区域上方,但我不知道如何在对话框中进行。

  • 我直接在相对布局中有两个线性布局。 我希望第一个LinearLayout占据75%的高度,接下来占据25%。我如何实现这一点? 例如 我希望线性布局1使用可用高度的75%,线性布局2使用25%<没有为LinearLayout定义layout_weight,因此显然它不起作用。 我有什么办法可以做到这一点吗? 这似乎是一个非常常见的场景,所以我几乎可以肯定这个问题以前被问过。 但我似乎没有找到它。请

  • 在我的应用程序,我想有滑动菜单在左侧,就像Facebook。 在我的前一个问题中,我提出了相同的问题,感谢这个答案,我可以找到一种方法,使用这个库向右滑动我的布局。但是,我发现,库实际上并不滑动布局,相反,它只是截图并向右滑动图像,因为布局上的组件是不可点击的。我需要这些组件是可点击的。因此,我尝试了一种新的实现方法,将滑出菜单放在左侧,保持的默认可见性,并在单击左上角的“显示/隐藏菜单”按钮时使

  • 问题内容: 我在XML中定义了以下布局: 如何使用LayoutInflater来获取ListView和ProgressBar并在代码中分配它? 问题答案: 通过这种方式:

  • 弹性盒子(Flexible Box)是一种用于按行或按列布局元素的一维布局方法,使用该布局的组件即为弹性容器(flex container),容器内的直系子组件则是弹性项目(flex item),他们可以膨胀以填充额外的空间,收缩以适应更小的空间,它们在 CSS 属性都为初始的情况下都会有下列行为: 项目排列成一行。(容器的 flex-direction 属性的初始值是 row) 项目从主轴的起始