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

Jetpack Compose中pagerTabIndicatorOffset调用报错的解决求助

解决方案:修复Jetpack Compose中TabRow的pagerTabIndicatorOffset参数错误

错误原因

你遇到的「None of the following functions can be called with the arguments supplied」错误,核心是pagerTabIndicatorOffset的参数不匹配:

  • 该扩展函数需要传入当前选中的TabPosition,而非整个tabPositions列表
  • 结合你使用的androidx.compose.foundation.pager.HorizontalPager,需要通过pagerState.currentPage从tabPositions中定位到当前选中的标签位置

另外,你设置width(0.dp)和height(0.dp)如果是为了隐藏默认指示器,完全可以直接省略指示器逻辑,不用绕弯路。

修复后的代码

以下是修正后的完整MainActivity代码,重点修复了TabRow的indicator部分:

class MainActivity : ComponentActivity() {
    @OptIn(ExperimentalFoundationApi::class)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val tabItems = listOf("Diziler", "Filmler", "Keşfet", "Profil")
            val pagerState = rememberPagerState()
            val coroutineScope = rememberCoroutineScope()

            ButtomNavigationTheme {
                Surface() {
                    Column() {
                        TabRow(
                            selectedTabIndex = pagerState.currentPage,
                            containerColor = Malibu,
                            modifier = Modifier
                                .padding(all = 20.dp)
                                .background(color = Color.Transparent)
                                .clip(RoundedCornerShape(30.dp)),
                            // 修复指示器逻辑:如果需要显示指示器,用下面的代码;如果要隐藏,直接设为indicator = {}
                            indicator = { tabPositions ->
                                // 获取当前选中的标签位置
                                val currentTabPosition = tabPositions[pagerState.currentPage]
                                TabRowDefaults.Indicator(
                                    modifier = Modifier
                                        .pagerTabIndicatorOffset(pagerState, currentTabPosition)
                                        // 如果你需要显示指示器,移除下面的宽高设置;如果要隐藏,直接替换整个indicator为{}
                                        .width(0.dp)
                                        .height(0.dp),
                                    color = Malibu // 可以自定义指示器颜色
                                )
                            }
                        ) {
                            tabItems.forEachIndexed { index, title ->
                                val color = remember { Animatable(Denim) }
                                LaunchedEffect(pagerState.currentPage == index) {
                                    color.animateTo(if (pagerState.currentPage == index) Color.White else Malibu)
                                }
                                Tab(
                                    text = {
                                        Text(
                                            title,
                                            style = if (pagerState.currentPage == index)
                                                TextStyle(color = Denim, fontSize = 18.sp)
                                            else TextStyle(color = Denim, fontSize = 16.sp)
                                        )
                                    },
                                    selected = pagerState.currentPage == index,
                                    modifier = Modifier.background(
                                        color = color.value,
                                        shape = RoundedCornerShape(30.dp)
                                    ),
                                    onClick = {
                                        coroutineScope.launch {
                                            pagerState.animateScrollToPage(index)
                                        }
                                    }
                                )
                            }
                        }
                        HorizontalPager(
                            pageCount = tabItems.size,
                            state = pagerState,
                            modifier = Modifier.fillMaxSize().background(color = Color.Blue)
                        ) { page ->
                            Text(
                                text = tabItems[page],
                                modifier = Modifier.padding(50.dp),
                                color = Color.White
                            )
                        }
                    }
                }
            }
        }
    }
}

额外说明

  1. 隐藏指示器的简化方式:如果你不需要默认的底部指示器,直接把indicator参数设置为indicator = {}即可,不需要设置宽高为0.dp。
  2. 版本适配:确保你的Compose依赖版本是最新稳定版,不同版本间的API可能有细微差异,建议使用compose-bom来统一管理版本,避免API不兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:07:12