Compose中实现TabLayout+ViewPager的效果

1.滚动Tablayout实现

 val tabs = mutableListOf(
        "标题",
        "长标题",
        "超长标题",
        "标题1",
        "超长标题标题1",
    )
 val pageState = rememberPagerState{
        tabs.size
    }
val scope = rememberCoroutineScope()
Column(modifier = Modifier
        .fillMaxSize()){
        ScrollableTabRow(selectedTabIndex = pageState.currentPage,
            modifier = Modifier
                .fillMaxWidth()
                .height(52.dp),
            indicator = { positions ->
                Box(
                    Modifier
                        .fillMaxWidth()
                        .tabIndicatorOffset(positions[pageState.currentPage])
                        .height(5.dp)
                        .padding(horizontal = 20.dp)
                        .background(color = Color.Black, shape = RoundedCornerShape(5.dp))
                )
            },
            divider = {//设置底部的分割线
                TabRowDefaults.Divider()
            }, edgePadding = 0.dp) {
            tabs.forEachIndexed { index, s ->
                Tab(modifier = Modifier.fillMaxHeight(), selected = index==pageState.currentPage, onClick = { scope.launch {pageState.scrollToPage(index)}}){
                    Text(text = s, color = Color.White, fontSize = if(index==pageState.currentPage) 16.sp else 14.sp, fontWeight = if(index==pageState.currentPage) FontWeight.Bold else FontWeight.Normal)
                }
            }
        }
        HorizontalPager(state = pageState,modifier = Modifier.fillMaxSize()) {
            Text(text = tabs[it], modifier = Modifier.fillMaxSize(), fontSize = 50.sp)
        }
    }

其中 indicator可以使用默认实现,自己实现可以增加indicator间距,默认实现宽度是fillMaxWidth()以下是官方默认实现:

TabRowDefaults.Indicator(
     Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
)
@Composable
    fun Indicator(
        modifier: Modifier = Modifier,
        height: Dp = IndicatorHeight,
        color: Color = LocalContentColor.current
    ) {
        Box(
            modifier
                .fillMaxWidth()
                .height(height)
                .background(color = color)
        )
    }

divider参考同理。

edgePadding官方默认有52.dp得左右padding。

2.非滚动TabLayout

        将ScrollableTabRow更换为TabRow即可,TabRow无edgePadding属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值