我想在我的屏幕顶部有一个appbar,它有两行:
1.最上面一行将包含屏幕名称和导航图标(TopAppBar)
1.第二行将包含用于导航到应用程序其他部分的选项卡(TabBar)
我希望在脚手架中实现上述内容。以下是我到目前为止写的代码。
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
@Composable
fun NestedScrollTest() {
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())
Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
TopAppBar(
title = { Text(text = "Scroll Behavior Test") },
navigationIcon = {
IconButton(onClick = { /*TODO*/ }) {
Icon(imageVector = Icons.Default.Menu, contentDescription = "")
}
},
scrollBehavior = scrollBehavior
)
}
) {
MyTabRowNew()
LazyColumn(
modifier = Modifier
.fillMaxWidth()
.padding(top = it.calculateTopPadding() + 56.dp)) {
items((1..50).toList()) { item ->
Text(modifier = Modifier.padding(8.dp), text = "Item $item")
}
}
}
}
@Composable
fun MyTabRowNew(){
var state by remember { mutableStateOf(0) }
val titles = listOf("Tab 1", "Tab 2", "Tab 3 with lots of text")
Column(
modifier = Modifier.padding(top = 64.dp)
) {
TabRow(selectedTabIndex = state) {
titles.forEachIndexed { index, title ->
Tab(
selected = state == index,
onClick = { state = index },
text = { Text(text = title, maxLines = 2, overflow = TextOverflow.Ellipsis) }
)
}
}
}
}
字符串
使用此代码,TopAppBar折叠,但TabBar不折叠,因此看起来很奇怪。当我在LazyColumn中滚动时,我如何将TabBar沿着折叠到TopAppBar中?
谢啦,谢啦
1条答案
按热度按时间dluptydi1#
实际上,您可以通过LazyColumnState和AnimateVisibility的组合来实现这一点。首先,你需要在你的项目中的某个地方添加这个Composable函数:
字符串
它只是检测LazyColumn是否正在向上滚动。现在你有了这个,它很简单,你只需要检测LazyColumn是否被向上滚动,如果为True,则显示TopBars,如果不隐藏它们:
型