带有 Tabs 的 TopAppBar 以不正确的颜色呈现 Tabs
TopAppBar with Tabs renders Tabs with incorrect color
我正在尝试构建用于在 Jetpack Compose 中显示 TopAppBar 和 Tabs 的组件。
下面是我想要实现的效果:
我为标签做了包装:
data class TabElement<T : Enum<T>>(
val id: T,
@StringRes val label: Int
)
@Composable
fun <T : Enum<T>> Tabs(
value: T,
tabs: List<TabElement<T>>,
onChange: (T) -> Unit
) {
TabRow(
modifier = Modifier
.height(54.dp)
.zIndex(2f),
selectedTabIndex = value.ordinal
) {
for (tab in tabs) {
Tab(
selected = value == tab.id,
text = {
Text(
text = stringResource(id = tab.label).toUpperCase(Locale.ROOT),
fontWeight = FontWeight.Bold
)
},
onClick = {
onChange(tab.id)
},
)
}
}
}
然后我将它与默认的 TopAppBar 一起使用:
@Composable
fun <T : Enum<T>> InternalTopBarWithTabs(
title: String,
modifier: Modifier = Modifier,
actions: @Composable RowScope.() -> Unit = {},
tabs: List<TabElement<T>>,
currentTab: T,
onTabChange: (T) -> Unit
) {
Column {
TopAppBar(title = { Text(title) }, modifier = modifier, actions = actions)
Tabs(value = currentTab, tabs = tabs, onChange = onTabChange)
}
}
视图结构构建正确,但选项卡颜色不正确(我仔细检查了 TopAppBar 颜色正是我在 MaterialTheme 中设置的主要颜色,所以问题出在选项卡上)。它看起来像这样:
我认为问题与选项卡的 contentColor 属性 有某种关系,因为我可以使用 contentColor = MaterialTheme.colors.primary
获得所需的颜色,但是使用此解决方案,选项卡(单个选项卡)的内容也被着色为原色。
谁能帮帮我?
删除 TabRow
中的 .height(54.dp)
修饰符并将其应用于 Tab
TabRow( modifier = Modifier
//.height(54.dp)
.zIndex(2f),
selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
modifier = Modifier.height(54.dp),
/* ...*/
)
)
在TabRow
中加上.height(54.dp)
修饰符:
没有:
我正在尝试构建用于在 Jetpack Compose 中显示 TopAppBar 和 Tabs 的组件。
下面是我想要实现的效果:
我为标签做了包装:
data class TabElement<T : Enum<T>>(
val id: T,
@StringRes val label: Int
)
@Composable
fun <T : Enum<T>> Tabs(
value: T,
tabs: List<TabElement<T>>,
onChange: (T) -> Unit
) {
TabRow(
modifier = Modifier
.height(54.dp)
.zIndex(2f),
selectedTabIndex = value.ordinal
) {
for (tab in tabs) {
Tab(
selected = value == tab.id,
text = {
Text(
text = stringResource(id = tab.label).toUpperCase(Locale.ROOT),
fontWeight = FontWeight.Bold
)
},
onClick = {
onChange(tab.id)
},
)
}
}
}
然后我将它与默认的 TopAppBar 一起使用:
@Composable
fun <T : Enum<T>> InternalTopBarWithTabs(
title: String,
modifier: Modifier = Modifier,
actions: @Composable RowScope.() -> Unit = {},
tabs: List<TabElement<T>>,
currentTab: T,
onTabChange: (T) -> Unit
) {
Column {
TopAppBar(title = { Text(title) }, modifier = modifier, actions = actions)
Tabs(value = currentTab, tabs = tabs, onChange = onTabChange)
}
}
视图结构构建正确,但选项卡颜色不正确(我仔细检查了 TopAppBar 颜色正是我在 MaterialTheme 中设置的主要颜色,所以问题出在选项卡上)。它看起来像这样:
我认为问题与选项卡的 contentColor 属性 有某种关系,因为我可以使用 contentColor = MaterialTheme.colors.primary
获得所需的颜色,但是使用此解决方案,选项卡(单个选项卡)的内容也被着色为原色。
谁能帮帮我?
删除 TabRow
中的 .height(54.dp)
修饰符并将其应用于 Tab
TabRow( modifier = Modifier
//.height(54.dp)
.zIndex(2f),
selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
modifier = Modifier.height(54.dp),
/* ...*/
)
)
在TabRow
中加上.height(54.dp)
修饰符:
没有: