Jetpack Compose 减少选项卡的内部填充

Tah*_*sif 11 tabs android android-tabs android-jetpack-compose

我想减少单个选项卡的填充。下图显示了我想要的:

1

我得到什么:

2

我目前正在使用版本 0.16.0 的“accompanist-pager”和“accompanist-pager-indicators”。

代码:

@Composable
fun Tabs(tabNames: List<String>, pagerState: PagerState, scrollToPage: (Int) -> Unit) {
  TabRow(
    selectedTabIndex = pagerState.currentPage,
    backgroundColor = Color.White,
    contentColor = Color.Black,
    divider = {
      TabRowDefaults.Divider(
        thickness = 4.dp
      )
    },
    indicator = { tabPositions ->
      TabRowDefaults.Indicator(
        modifier = Modifier.customTabIndicatorOffset(tabPositions[pagerState.currentPage]),
        height = 4.dp,
        color = EmeraldTheme.colors.primary
      )
    }
  ) {
    tabNames.forEachIndexed { index, name ->
      Tab(
        text = {
          Text(
            text = name,
            maxLines = 1,
            style = globalSearchDefaultTextStyle,
            fontWeight = if (pagerState.currentPage == index) FontWeight.Bold else FontWeight.Normal,
            color = if (pagerState.currentPage == index) EmeraldColor.Black100 else colorResource(globalSearchR.color.darkGrey20),
          )
        },
        selected = pagerState.currentPage == index,
        onClick = {
          scrollToPage(index)
        }
      )
    }
    Row { Spacer(Modifier.weight(1f, true)) }
  }
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*ski 8

TabRow使用(或)的当前版本,ScrollableTabRow您将无法执行此操作。您将需要创建自己的TabRow可组合项。

另外,您可能应该使用 aScrollableTabRow而不是,TabRow因为均匀地分配了其 的TabRow整个可用空间。因此,内容填充并不那么重要。widthTabs

您几乎可以复制粘贴 的整个代码ScrollableTabRow,但修改设置tabConstraints.

它不应该再使用minTabWidth

val minTabWidth = ScrollableTabRowMinimumTabWidth.roundToPx()
Run Code Online (Sandbox Code Playgroud)

  • 很奇怪的是,我们无法直接设置所需的制表符宽度。您的解决方案仍然与 1.2.0-rc03 版本的 Compose 相关 (2认同)

小智 5

您可以使用java反射来更改ScrollableTabRowMinimumTabWidth的值。您可以在这里投票 -> https://issuetracker.google.com/issues/226665301

try {
    Class
        .forName("androidx.compose.material3.TabRowKt")
        .getDeclaredField("ScrollableTabRowMinimumTabWidth").apply {
            isAccessible = true
        }.set(this, 0f)
} catch (e: Exception) {
    e.printStackTrace()
}
Run Code Online (Sandbox Code Playgroud)