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

Jetpack Compose Row布局:如何让加载圆形指示器居中显示?

问题描述

需要将加载圆形指示器定位在屏幕中心,但当前显示效果如下:
当前效果

现有代码如下:

圆形指示器代码

@Composable
fun CircularProgressBar(isLoading: Boolean) {
    if(isLoading) {
        CircularProgressIndicator(
            modifier = Modifier
                .padding(top = 10.dp),
            color = Color.Gray
        )
    }
}

Row布局代码

Row(
            modifier = Modifier.fillMaxSize(),
            horizontalArrangement = Arrangement.SpaceBetween
        ) {
            IconButton(
                onClick = {
                    navController.popBackStack()
                },
                modifier = Modifier
                    .padding(start = 15.dp, bottom = 15.dp),
            ) {
                Icon(
                    painter = painterResource(id = R.drawable.ic_baseline_arrow_back_24),
                    contentDescription = "back",
                    modifier = Modifier.size(35.dp)
                )
            }

            CircularProgressBar(isLoading = true)
        }

想要实现的目标效果:
目标效果

解决方案

当前指示器无法居中是因为它被放在Row内部,而Row的SpaceBetween排列规则会让元素分靠两端。要实现全屏居中,需做两处调整:

  1. 修改CircularProgressBar的修饰符
    给指示器添加占满空间并居中的修饰符,让它自身具备居中能力:
@Composable
fun CircularProgressBar(isLoading: Boolean) {
    if(isLoading) {
        CircularProgressIndicator(
            modifier = Modifier
                .fillMaxSize()
                .wrapContentSize(Alignment.Center),
            color = Color.Gray
        )
    }
}
  1. 调整布局层级
    将CircularProgressBar从Row中移出,和Row共同放在Box容器内。Box允许子元素重叠,这样指示器可以覆盖在全屏上方居中,同时不影响返回按钮的原有布局:
Box(modifier = Modifier.fillMaxSize()) {
    Row(
        modifier = Modifier.fillMaxSize(),
        horizontalArrangement = Arrangement.SpaceBetween
    ) {
        IconButton(
            onClick = {
                navController.popBackStack()
            },
            modifier = Modifier
                .padding(start = 15.dp, bottom = 15.dp),
        ) {
            Icon(
                painter = painterResource(id = R.drawable.ic_baseline_arrow_back_24),
                contentDescription = "back",
                modifier = Modifier.size(35.dp)
            )
        }
    }

    CircularProgressBar(isLoading = true)
}

修改完成后,加载指示器就会显示在屏幕正中心,与目标效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:52:44