@Composable
fun LayoutsCodelab() {
Scaffold(
topBar = {
TopAppBar(
title = {
Text(text = "LayoutsCodelab")
}
)
}
) { innerPadding ->
BodyContent(Modifier.padding(innerPadding))
}
}
Run Code Online (Sandbox Code Playgroud)
删除innerPadding不会改变任何东西。
请注意,我是Compose
新手。
如果有任何困惑,请在评论中询问
android android-jetpack-compose android-jetpack-compose-scaffold
我有 2 个屏幕,它们都有自己的Scaffold和TopAppBar。当我使用 Jetpack Navigation Compose 库在它们之间导航时,应用程序栏会闪烁。为什么会发生这种情况以及我该如何摆脱这种情况?
代码:
导航:
@Composable
fun TodoNavHost(
navController: NavHostController,
modifier: Modifier = Modifier
) {
NavHost(
navController = navController,
startDestination = TodoScreen.TodoList.name,
modifier = modifier
) {
composable(TodoScreen.TodoList.name) {
TodoListScreen(
onTodoEditClicked = { todo ->
navController.navigate("${TodoScreen.AddEditTodo.name}?todoId=${todo.id}")
},
onFabAddNewTodoClicked = {
navController.navigate(TodoScreen.AddEditTodo.name)
}
)
}
composable(
"${TodoScreen.AddEditTodo.name}?todoId={todoId}",
arguments = listOf(
navArgument("todoId") {
type = NavType.LongType
defaultValue = -1L
}
)
) {
AddEditTodoScreen(
onNavigateUp = {
navController.popBackStack()
},
onNavigateBackWithResult = { result …Run Code Online (Sandbox Code Playgroud) android android-jetpack android-jetpack-navigation android-jetpack-compose android-jetpack-compose-scaffold
我正在使用 jetpack compose 编写一个 android 应用程序。
这个应用程序有一个底部栏,我有时想使用动画隐藏它。然而,这证明是具有挑战性的:当我处理可滚动屏幕时,我的用户界面出现了一些“跳跃” - 请参阅帖子末尾。
我的最小示例如下所示:
@Preview
@Composable
fun JumpingBottomBarScreen() {
var bottomBarVisible by remember { mutableStateOf(false) }
Scaffold(
content = { padding ->
Column(
modifier = Modifier
.verticalScroll(rememberScrollState())
.fillMaxWidth()
.background(Color.LightGray)
.padding(padding)
) {
(1..20).forEach { Text(text = "Test #$it of 50") }
Button(
onClick = { bottomBarVisible = !bottomBarVisible },
content = { Text(if (bottomBarVisible) "Hide Bottom Bar" else "Show Bottom Bar") }
)
(21..50).forEach { Text(text = "Test #$it of 50") }
}
}, …Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose android-jetpack-compose-scaffold
我有一个封装密封类的 Flow,用于向 UI 调用消息。例如显示 Snackbar。我可以使用 LaunchedEffect 观察可组合项的流程。但问题是我想从协程范围中检索字符串资源。我不想在视图模型中使用直接字符串值,因为我想使用不同语言的区域设置,所以我传递了字符串 Res Id。那么有没有一种好的方法可以做到这一点,而无需将字符串资源放入 Application 类中并从那里检索它们,如此处所示getString Outside of a Context or Activity
代码如下:
@Composable
fun HomeScreen(viewModel: CityWeatherViewModel) {
val scaffoldState = rememberScaffoldState()
LaunchedEffect(true) {
viewModel.eventFlow.collectLatest { event ->
when (event) {
is CityWeatherViewModel.UIEvent.ShowSnackbar -> {
// THE PROBLEM IS HERE!!!, since event.messageResId is res id, and not the string resource, and I can not use …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose android-jetpack-compose-scaffold
导航撰写版本2.4.0-alpha06
我有一个导航抽屉Scaffold,其中部分项目是由 ViewModel 动态生成的。
示例项目有
其中 A、B、C... 都共享相同的Screencalled Category,只是传递了不同的参数(例如 Category/A、Category/B)。
在我的里面Scaffold
...
val items = viewModel.getDrawerItems()
// This gives something like
// ["Home", "Category/A", "Category/B", "Category/C", ..., "Settings"]
// where each String represents "route"
...
val backstackEntry = navController.currentBackStackEntryAsState()
val currentScreen = Screen.fromRoute(
backstackEntry.value?.destination?.route
)
Log.d("Drawer", "currentScreen: $currentScreen")
items.forEach { item ->
DrawerItem(
item = item,
isSelected = currentScreen.name == item.route,
onItemClick = {
Log.d("Drawer", "destinationRoute: ${item.route}") …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-navigation android-jetpack-compose android-jetpack-compose-scaffold
我是第一次使用 Jetpack Compose,但出现此错误。我还没有弄清楚问题到底出在哪里,但我使用的是单一活动架构。如果需要更多信息,请通知我。根据错误,问题似乎来自 Scaffold。
val scaffoldState = rememberScaffoldState()
Scaffold(
scaffoldState = scaffoldState,
snackbarHost = {
SnackbarHost(hostState = it)
}
) {
Run Code Online (Sandbox Code Playgroud)
java.lang.NoSuchFieldError: No field Companion of type Landroidx/compose/foundation/layout/BoxScope$Companion; in class Landroidx/compose/foundation/layout/BoxScope; or its superclasses (declaration of 'androidx.compose.foundation.layout.BoxScope' appears in /data/app/com.octagon_technologies.scafe-0B8-dDpbnRqa6fydxFPekw==/base.apk)
at androidx.compose.material.SurfaceKt$Surface$1.invoke(Surface.kt:149)
at androidx.compose.material.SurfaceKt$Surface$1.invoke(Surface.kt:105)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:102)
at androidx.compose.material.ScaffoldKt$Scaffold$child$1.invoke(Scaffold.kt:168)
at androidx.compose.material.ScaffoldKt$Scaffold$child$1.invoke(Scaffold.kt:167)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:118)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.material.ScaffoldKt.Scaffold-J67Y1T8(Scaffold.kt:197)
at com.octagon_technologies.scafe.presentation.MainActivity$onCreate$1$1.invoke(MainActivity.kt:54)
at com.octagon_technologies.scafe.presentation.MainActivity$onCreate$1$1.invoke(MainActivity.kt:47)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
at androidx.compose.material.TextKt.ProvideTextStyle(Text.kt:246)
at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:78)
at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:77)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109) …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose android-jetpack-compose-scaffold
如何根据 Scaffold 的当前屏幕更改 FAB 操作(onClick{})。
Scaffold(
floatingActionButton = {
FloatingActionButton(onClick = {
//Different actions here depending on current screen
}) { }
}
) {
NavHost(
navController = navController,
startDestination = "route1"
) {
composable(
route = "route1"
) {
ScreenOne()
}
composable(
route = "route2"
) {
ScreenTwo()
}
}
}
Run Code Online (Sandbox Code Playgroud)
例如,使用 ScreenOne() 我想向数据库添加一些实体,使用 ScreenTwo() 我想保存编辑后的实体。所有这些都使用 Scaffold 共享的相同 FAB。
更新:刚刚明白我还需要提到我还需要 FAB 来了解一些数据来操作。例如,我想通过单击 FAB 将一些实体保存到数据库,因此 FAB 需要了解该实体。
示例:我单击列表中的某个项目。它打开一些实体的导航方向。我正在修改此实体并单击 FAB 来保存编辑后的实体。
android android-jetpack-compose android-jetpack-compose-scaffold
我试图将导航栏设置为与底部应用程序栏相同的颜色,但我不明白应用程序栏的颜色来自深色主题。看起来应该是这样MaterialTheme.colors.primarySurface,但我使用的systemUiController.setNavigationBarColor(color = MaterialTheme.colors.primarySurface)颜色与应用栏不同。此处您将看到两个都设置为 时的示例MaterialTheme.colors.primarySurface。
它适用于浅色主题,但不适用于深色主题。
那么深色主题应用栏颜色从何而来?
android android-jetpack-compose android-jetpack-compose-scaffold
我们可以在 JetpackCompose 中使用导航抽屉,Scaffold如下所示
Scaffold(
drawerContent = { Text(text ="Drawer") }
) {}
Run Code Online (Sandbox Code Playgroud)
我想让抽屉的宽度变小。我怎么能这样做?
我想知道什么是喷气背包中的 Scaffold 与一个BottomAppBar 示例 谁能帮助我
Scaffold
android android-bottomappbar android-jetpack-compose android-jetpack-compose-scaffold