如何在 Compose 中设置底部工作表的半展开比例?

Sou*_*313 13 android kotlin bottom-sheet android-jetpack-compose android-jetpack-compose-material3

在 XML 中,我们有 Material3 底部工作表。它允许我们设置底部工作表的行为。它可以像这样更新:

bottomSheetBehavior.halfExpandedRatio = 0.6
bottomSheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
Run Code Online (Sandbox Code Playgroud)

我正在将项目迁移到 Compose。我的应用程序将这个半展开比例用于 3 个定位的底部工作表:折叠、半展开、展开。现在我正在尝试创建这样的底表:

val sheetState = rememberBottomSheetState(
        initialValue = BottomSheetValue.Collapsed
    )
    val scaffoldState = rememberBottomSheetScaffoldState(
        bottomSheetState = sheetState
    )
BottomSheetScaffold(
        scaffoldState = scaffoldState,
        sheetContent = {}
) {}
Run Code Online (Sandbox Code Playgroud)

但看起来我们这里没有这些行为属性。我们能否获得与 XML 中具有一半展开的底部表相同的行为?

mas*_*shi 0

是的,这是可能的。但这是一点点工作。您基本上必须提供自己的类实现BottomSheetScaffold以及SwipeableState这两者使用的任何相关枚举、类和可组合函数。

需要重点关注的要点:

  • BottomSheetValue为半展开状态提供第三个值
  • 提供一个对半展开进行动画处理的函数(类似于中的函数expand()和)以及检查底部工作表是否半展开的属性(类似于)collapse()BottomSheetStateval isExpanded: Boolean
  • 添加三分之一swipeable anchorBottomSheetScaffold您想要实现的一半扩展值(检查行fullHeight - peekHeightPx to Collapsed,这里是您想要添加自定义锚点的位置)
  • 处理in.semantics块中的半展开状态ModifierBottomSheetScaffold

您可能需要根据您的具体要求进行更多调整。设置所有内容可能需要一段时间,但一旦完成,它就会发挥作用。

  • 您能提供一个例子吗? (2认同)