You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Compose实现上滑LazyColumn时隐藏TopBar的方法

Android Compose实现上滑LazyColumn隐藏TopBar

直接给你改造后的完整代码,关键逻辑都加了注释:

@Composable
fun PostScreen(postData: List<Post>) {
    // 定义LazyColumn的滚动状态
    val lazyListState = rememberLazyListState()
    // 记录上一次的滚动位置,用来判断滚动方向
    var lastScrollPosition by remember { mutableStateOf(0) }
    // 标记是否正在上滑
    var isScrollingUp by remember { mutableStateOf(false) }
    // TopBar的默认高度(如果是自定义TopBar,可替换成你自己的固定高度)
    val topBarHeight = TopAppBarDefaults.smallTopAppBarHeight

    // 根据滚动方向生成TopBar的偏移动画
    val topBarOffset by animateDpAsState(
        targetValue = if (isScrollingUp) -topBarHeight else 0.dp,
        animationSpec = tween(durationMillis = 300)
    )

    // 监听滚动状态变化,判断滚动方向
    LaunchedEffect(lazyListState) {
        snapshotFlow { lazyListState.firstVisibleItemScrollOffset }
            .collect { currentOffset ->
                isScrollingUp = currentOffset < lastScrollPosition
                lastScrollPosition = currentOffset
            }
    }

    Scaffold(
        topBar = {
            // 给TopBar应用偏移动画
            PostTopBar(
                modifier = Modifier.offset(y = topBarOffset)
            )
        }
    ){ innerPadding ->
        CompositionLocalProvider(
            LocalOverscrollConfiguration provides null
        ) {
            LazyColumn(
                state = lazyListState, // 关联滚动状态
                horizontalAlignment = Alignment.CenterHorizontally,
                modifier = Modifier
                    .padding(innerPadding)
                    .fillMaxWidth()
            ) {
                items(postData.size) {
                    Column {
                        Post(postData = postData[it], index = it)
                    }
                }
            }
        }
    }
}

关键逻辑说明

  • 用rememberLazyListState获取LazyColumn的滚动状态,通过snapshotFlow监听滚动偏移量的变化,对比上一次的位置判断是上滑还是下滑。
  • animateDpAsState负责处理TopBar的平滑偏移动画,上滑时让TopBar向上移出屏幕(偏移量为负的自身高度),下滑时恢复到原位置。
  • 如果你的PostTopBar是自定义组件且高度不是默认值,把topBarHeight替换成你自定义的高度值即可,比如64.dp。

内容的提问来源于stack exchange,提问作者HamTory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:16:20