问题的实质是我想编写自己的AppBar
版本,它将内容作为另一个Compose函数包含在内。在查看当前CollapsingTopAppBar
实现的源代码后,我看到了以下几行:
@Composable
private fun TwoRowsTopAppBar(
...
scrollBehavior: TopAppBarScrollBehavior?
) {
...
val pinnedHeightPx: Float = 64.dp
val maxHeightPx: Float = 152.dp
LocalDensity.current.run {
pinnedHeightPx = pinnedHeight.toPx()
maxHeightPx = maxHeight.toPx()
}
// Sets the app bar's height offset limit to hide just the bottom title area and keep top title
// visible when collapsed.
SideEffect {
if (scrollBehavior?.state?.heightOffsetLimit != pinnedHeightPx - maxHeightPx) {
scrollBehavior?.state?.heightOffsetLimit = pinnedHeightPx - maxHeightPx
}
}
...
Surface(...) {
Column {
TopAppBarLayout(
...
heightPx = pinnedHeightPx
...
)
TopAppBarLayout(
...
heightPx = maxHeightPx - pinnedHeightPx + (scrollBehavior?.state?.heightOffset
?: 0f),
...
)
}
}
}
据我所知,scrollBehavior
用于处理折叠和展开行为。在当前的实现中,只有常量值被放入heightOffsetLimit
。由于我需要我的appbar实现能够包含任何大小的内容,我需要以某种方式提前知道这些内容的大小,并将该值放入heightOffsetLimit
。
我已经为AppBar编写了代码,使其也包含内容,但由于我无法将内容的高度值传递给scrollBehavior
,因此AppBar不会折叠到末尾。
1条答案
按热度按时间rkue9o1l1#
你需要计算的高度,应用程序栏将有之前,提请到屏幕上。我已经跟进了这个问题,并解决了我的问题与最后的解决方案。希望它有帮助:
Get height of element Jetpack Compose
你就可以走了