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

Jetpack Compose:如何设置HorizontalPager单页面宽度为屏幕70%?

解决Jetpack Compose HorizontalPager单页面宽度设置问题

要实现单个页面宽度为屏幕70%、高度占满可用空间的效果,你需要调整HorizontalPager的pageSize参数,而非直接给HorizontalPager设置宽度。具体修改如下:

  1. 将pageSize从PageSize.Fill改为PageSize.Fraction(0.7f),这会让每个页面的宽度占父容器宽度的70%
  2. 调整contentPadding,让页面在水平方向居中显示,避免页面贴边
  3. 确保页面内的Card使用fillMaxHeight()来占满垂直空间(因为PageSize.Fraction只控制宽度)

修改后的完整代码:

HorizontalPager(
    state = pagerState,
    pageSize = PageSize.Fraction(0.7f), // 设置单页宽度为父容器的70%
    contentPadding = PaddingValues(horizontal = (LocalConfiguration.current.screenWidthDp * 0.15f).dp) // 左右各留15%空间,让页面居中
) { page ->
    val media = mediaList[page]
    Card(
        modifier = Modifier
            .fillMaxHeight() // 高度占满可用空间
            .graphicsLayer {
                val pageOffset = (
                        (pagerState.currentPage - page) + pagerState
                            .currentPageOffsetFraction
                        ).absoluteValue
                alpha = lerp(
                    start = 0.5f,
                    stop = 1f,
                    fraction = 1f - pageOffset.coerceIn(0f, 1f)
                )
            }
    ) {
        AsyncImage(
            modifier = Modifier.fillMaxSize(),
            contentScale = ContentScale.Crop,
            model = ImageRequest.Builder(context)
                .data(media.uri)
                .crossfade(true)
                .build(),
            contentDescription = null
        )
    }
}

补充说明

  • 直接给HorizontalPager设置fillMaxWidth(0.7f)只会缩小整个Pager容器的宽度,所有页面会挤在这个窄容器里,不符合需求
  • PageSize.Fraction(0.7f)是专门用来控制单个页面宽度占比的参数,配合居中的contentPadding就能实现你要的效果
  • 用LocalConfiguration计算左右padding可以保证在不同屏幕尺寸下都能准确居中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:40:09