Mik*_*fer 5 tabs android android-jetpack-compose
我正在尝试让 Tabs 在 Android 上通过 compose 与 TabRow 一起使用。我想要的是 TabRow 有白色背景。默认颜色似乎是紫色(左右),如文档(https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary)所示。
当我将背景颜色设置为白色时,选项卡由于某种原因呈灰色。
如何在 Compose 中实现白色选项卡?
谢谢!
Ale*_*ber 13
编辑:谷歌现已修复此问题:https://issuetracker.google.com/issues/197254738。希望它能尽快进入 JC 版本!
\n问题已经有几个月了,但最近遇到了这个问题,所以其他人可能会发现这些解决方案很有用:
\n没有分隔线。例如:
\nTabRow(\n selectedTabIndex = ...,\n modifier = Modifier.height(100.dp).fillMaxWidth(),\n divider = {}\n) { /* content here */ }\nRun Code Online (Sandbox Code Playgroud)\n由于 TabRow 只是一个容器,因此不要height在其修饰符中指定 a。如果您希望它具有自定义高度,请确保每个选项卡都明确指定了其高度。例如:
var selectedTabIndex by remember { mutableStateOf(0) }\n\nTabRow(\n selectedTabIndex = selectedTabIndex,\n modifier = Modifier.fillMaxWidth(), // Don\'t specify the TabRow\'s height!\n backgroundColor = Colors.White\n) {\n listOf("Hello", "World").forEachIndexed { i, text ->\n Tab(\n selected = selectedTabIndex == i,\n onClick = { selectedTabIndex = i },\n modifier = Modifier.height(50.dp), // Specify the Tab\'s height instead\n text = { Text(text) }\n )\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n强制分隔线仅绘制在布局的底部。这与默认指标实现一致。
\nTabRow(\n selectedTabIndex = ...,\n modifier = Modifier.height(100.dp).fillMaxWidth(),\n backgroundColor = Colors.White,\n divider = { TabRowDefaults.Divider(Modifier.wrapContentSize(Alignment.BottomStart)) },\n) { /* content here */ }\nRun Code Online (Sandbox Code Playgroud)\n从这里和这里的源代码来看,默认分隔线的高度为 1dp。然而,OP 看到的是灰色背景,因为分隔线正在整个 TabRow 上绘制!
\nheight当您在 a 上指定约束时TabRow,该约束将传递到除法器(此处为源代码)。因此,在 OP 的情况下,分隔线占据了 TabRow \xe2\x80\x93 的整个高度,分隔线是透明的灰色,因此它使 TabRow 看起来是灰色的。上述解决方案有几种不同的方式来解决问题:
您可以使用 设置颜色backgroundColor: Color = MaterialTheme.colors.primarySurface,。
示例代码如下:
@Composable
fun TabRow(
selectedTabIndex: Int,
modifier: Modifier = Modifier,
backgroundColor: Color = MaterialTheme.colors.primarySurface,
contentColor: Color = contentColorFor(backgroundColor),
indicator: (List<TabPosition>) -> Unit = @Composable { tabPositions ->
TabRowDefaults.Indicator(
Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
)
},
divider: () -> Unit = @Composable {
TabRowDefaults.Divider()
},
tabs: () -> Unit
): @Composable Unit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9911 次 |
| 最近记录: |