我需要在我的 Android 应用程序中添加一个工具栏,其中包含如下所示的列表。我正在使用Jetpack Compose创建 UI。下面是我用来绘制主视图的可组合函数。
@Composable
fun HomeScreenApp() {
showPetsList(dogs = dogData)
}
Run Code Online (Sandbox Code Playgroud)
android android-toolbar android-jetpack android-jetpack-compose android-compose-appbar
想象一下 Android 中工具栏的常见行为。
Toolbar
您在 中定义一个小部件Activity
,并可以在片段内使用onCreateOptionsMenu
和访问它。onOptionsItemSelected
然而,这样的事情对于普通的 Jetpack Compose 来说是不可能的,因为无法访问中Toolbar
定义的。Activity
Scaffold
所以想想这个场景。你有一个Activity
, ,Scaffold
里面有定义,还有一个NavHost
that Scaffold
。包含NavHost
应用程序的所有子页面(其他可组合项)。标题可以通过导航目标侦听器进行处理,剩下的就是工具栏的操作。
您将如何根据您所在的当前页面/可组合项更改工具栏操作?并处理这些操作的点击?
PS:在每个页面中使用工具栏并不是一个解决方案,因为在动画页面之间切换时,工具栏会消失并重新出现在每个页面上,这会导致糟糕的用户体验。
我想隐藏navigationIcon,但是当我通过null
或Unit
图标空间仍然可见时,如下图所示。
@Composable
fun DefaultScaffold(
title: String? = null,
icon: ImageVector? = null,
content: @Composable() () -> Unit
) {
Scaffold(
topBar = {
TopAppBar(
title = {
if (title != null) {
Text(text = "My Title")
}
},
navigationIcon = {
if (icon != null) {
IconButton(
onClick = {}
) {
Icon(imageVector = Icons.Filled.Close, contentDescription = null)
}
} else Unit
}
)
}
) {
content()
}
}
Run Code Online (Sandbox Code Playgroud) android android-jetpack android-jetpack-compose android-compose-appbar
android ×3