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

Compose Glance App Widget:实现局部区域滚动的问题

Glance Widget局部LazyColumn无法滚动的修复方案

问题根源

你的代码中Box使用fillMaxSize后,内部的LazyColumn会默认占据整个Widget的高度。在Glance Widget的规则里,滚动组件必须有明确的高度边界,否则系统无法识别内容超出的区域,自然无法触发滚动——哪怕滚动指示器会显示。

修复代码

给LazyColumn添加高度约束,同时确保滚动交互生效:

Box(
    modifier = GlanceModifier
        .fillMaxSize()
        .background(ImageProvider(R.drawable.bg_widget))
        .padding(vertical = 16.dp, horizontal = 8.dp)
) {
    LazyColumn(
        modifier = GlanceModifier
            .fillMaxWidth()
            // 限制最大高度为父组件的可用空间,也可设置固定高度如250.dp
            .heightIn(max = Dimension.fillToConstraints)
            .verticalScroll(rememberScrollState())
    ) {
        items(itemList) { item ->
            Text(item.text)
        }
    }
}

可选调整

如果需要让LazyColumn自适应内容但不超过某个上限,可改用如下写法:

LazyColumn(
    modifier = GlanceModifier
        .fillMaxWidth()
        .wrapContentHeight()
        .heightIn(max = 300.dp)
) {
    items(itemList) { item ->
        Text(item.text)
    }
}

核心注意点

  • Glance Widget的滚动逻辑和常规Jetpack Compose不同,必须给滚动组件设置有限的高度范围,不能让它无限制填充父布局。
  • verticalScroll(rememberScrollState())是Glance中启用滚动交互的必要配置,部分版本的LazyColumn需要手动添加才能触发滚动。

内容的提问来源于stack exchange,提问作者tilen pintarić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:45:27