требование
Код: Выделить всё
val density = LocalDensity.current
val tabWidths = remember {
val tabWidthStateList = mutableStateListOf()
repeat(items.size) {
tabWidthStateList.add(0.dp)
}
tabWidthStateList
}
ScrollableTabRow(
selectedTabIndex = selectedItemIndex,
edgePadding = 0.dp,
indicator = { tabPositions ->
TabRowDefaults.Indicator(
modifier = Modifier.customTabIndicatorOffset(
currentTabPosition = tabPositions[selectedItemIndex],
tabWidth = tabWidths[selectedItemIndex],
indicatorPaddingToTitle = indicatorPaddingToTitle,
),
color = selectedTabTextColor
)
},
divider = {}, // Removes the default divider
modifier = Modifier.fillMaxWidth()
) {
items.forEachIndexed { index, title ->
Box(
contentAlignment = Alignment.TopCenter
){
Tab(
selected = selectedItemIndex == index,
onClick = { onTabSwitch(index) },
text = {
Text(
text = title,
style = if (selectedItemIndex == index)
MaterialTheme.typography.bodyMedium.copy(
fontWeight = FontWeight.Bold,
color = selectedTabTextColor
)
else
MaterialTheme.typography.bodyMedium.copy(
fontWeight = FontWeight.Medium,
color = unselectedTabTextColor
),
onTextLayout = { textLayoutResult ->
tabWidths[index] =
with(density) { textLayoutResult.size.width.toDp() }
}
)
},
)
}
}
}
Если вы видите, что начальное дополнение для первого элемента немного больше, чем мне нужно.
Я попробовал другой подход: обернуть элемент Tab внутри Box с помощью contentAlignment = TopStart, при этом заполнение фиксируется, но положение индикатора теряется. Еще одна вещь, когда я использую contentAlignment = Alignment.TopCenter, тогда проблема с заполнением возвращается: откуда-то, если выравнивание по центру, добавляется дополнительное дополнение вокруг вкладки.
Хочу знать, есть ли какой-нибудь способ управлять этим начальным заполнением без нарушение индикатора.
Подробнее здесь: https://stackoverflow.com/questions/793 ... abletabrow
Мобильная версия