android - 应用 TopAppBar 的插图变为透明?
问题描述
我正在尝试构建一个屏幕,内容从 TopAppBar 后面开始,使用accompanist-insets
. 但是,应用栏始终是透明的。
如何使其成为实心/非透明导航栏?
电流输出
代码
val scrollState = rememberLazyListState()
var isScrollStateChanged by remember { mutableStateOf(false) }
isScrollStateChanged = scrollState.firstVisibleItemScrollOffset != 0
val position by animateFloatAsState(if (isScrollStateChanged) 0f else -45f)
val listItems = (1..100).toList()
ProvideWindowInsets {
Surface(
modifier = Modifier
.fillMaxSize()
.systemBarsPadding(),
color = Color.White
) {
Box(Modifier.fillMaxSize()) {
TopAppBar(
content = { Text("Hello nav bar!") },
modifier = Modifier
.offset(0.dp, position.dp)
.alpha(min(1f, 1 + (position / 45f)))
.navigationBarsPadding(bottom = false),
backgroundColor = Color.Red
)
LazyColumn(
state = scrollState
) {
items(items = listItems) {
Text(
"Hello $it",
Modifier
.padding(20.dp)
.fillMaxWidth()
)
}
}
}
}
}
解决方案
它没有透明背景。实际上它LazyColumn
具有透明背景,并TopAppBar
位于下方。
使用Box
您将项目放在彼此之上,因此第二个将在第一个之下。重新排序:
Box(Modifier.fillMaxSize()) {
LazyColumn(
state = scrollState
) {
items(items = listItems) {
Text(
"Hello $it",
Modifier
.padding(20.dp)
.fillMaxWidth()
)
}
}
TopAppBar(
content = { Text("Hello nav bar!") },
modifier = Modifier
.offset(0.dp, position.dp)
.alpha(min(1f, 1 + (position / 45f)))
.navigationBarsPadding(bottom = false),
backgroundColor = Color.Red
)
}
推荐阅读
- javascript - 抓取html页面结果..顺序不正确
- arduino - 如何在 /dev/ttyACM0 设备文件上执行 echo 命令后读取响应?
- laravel - Laravel 问题 创建客户端需要凭据
- ruby-on-rails - 在 RailsEventStore 中删除订阅
- ionic-framework - ionic 3 输入数据绑定正在更新相同类型的不同数组
- android - 用于在 android 中访问联系人应用程序的特定 api
- spring - 部署在 docker 容器中的两个微服务之间的通信
- python - Python:通过函数打印列表中所有项目的总和
- parallel-processing - apache camel - 并行处理器然后加入输出
- javascript - 如何将数据显示键设置为来自 JSON API 的变量