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排列规则会让元素分靠两端。要实现全屏居中,需做两处调整:
- 修改CircularProgressBar的修饰符
给指示器添加占满空间并居中的修饰符,让它自身具备居中能力:
@Composable fun CircularProgressBar(isLoading: Boolean) { if(isLoading) { CircularProgressIndicator( modifier = Modifier .fillMaxSize() .wrapContentSize(Alignment.Center), color = Color.Gray ) } }
- 调整布局层级
将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
相关产品推荐
相关产品推荐

