几天来我一直在尝试解决 Jetpack Compose 问题的插图,但我完全陷入困境。我真的很难理解我的实现出了什么问题,因为使用 XML 来实现这一切都非常简单。
我尝试遵循指南、一些教程并搜索其他问题,但我无法找到正确的解决方案,每个问题都有不同的问题,所以我显然错过了一些东西。
<application
android:name=".Application"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="false"
android:windowSoftInputMode="adjustResize"
android:theme="@style/CustomTheme">
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false
checkAppSettings() // Just checks some data store settings.
setContent {
val viewState = viewModel.viewState.collectAsStateWithLifecycle()
MyTheme(darkTheme = viewState.value.uiMode.isDarkTheme()) {
MainScreen()
}
}
}
imePadding()
和 systemBarsPadding()
添加到我的主支架中。我还更改了底部栏的可见性,以解决底部栏被推到内容旁边的问题。注意:我还尝试了不同的组合,但我已经数不清了,包括删除主脚手架并将其替换为具有重量(1f)的 navHost 和其下方的底部栏的列,但仍然没有骰子。
@Composable
fun MainScreen() {
val navController = rememberNavController()
Scaffold(
modifier = Modifier
.fillMaxSize()
.imePadding()
.systemBarsPadding(),
bottomBar = {
if (!WindowInsets.isImeVisible) BottomNavigationBar(navController)
}
) { paddingValues ->
NavigationHost(
modifier = Modifier.padding(paddingValues),
navController = navController
)
}
}
为了进一步扩展,我的结构从主屏幕开始如下:
\- MainScaffold \
\- MainNavHost \
\- SelectedBottomNavItemNavHost \
\- SelectBottomNavItemScaffold
并为
SelectBottomNavItemScaffold
添加更多细节,这就是几乎每个屏幕上的样子:
Scaffold(
topBar = {
// This uses Material TopAppBar internally
CustomTopAppBar(
topAppBarVariation = TopAppBarVariation.Title(title = stringResource(id = label)),
showIcons = state.shouldDisplayEditFeedIcon(),
actions = {
Icon(
modifier = Modifier.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = ripple(bounded = false),
onClick = { navController.navigateTo(FeedNavigationItem.FeedEdit) }
),
painter = painterResource(R.drawable.ic_edit),
contentDescription = stringResource(id = R.string.edit)
)
}
)
}
) { paddingValues ->
Column(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues)
) {
// Page content goes here, now.
}
}
实际问题可以在我下面分享的两个视频中看到:
不要隐藏底栏 | 在底部栏添加 检查 |
---|---|
https://imgur.com/HkLysj7 | https://imgur.com/SY3xhz6 |
在第一种方法中,我们不隐藏任何内容。底部栏随键盘滚动,看起来不错。但是,如果您将文本视图聚焦在屏幕底部,则向上滚动内容时会出现一些抖动。如果我选择屏幕顶部的文本视图,则不会出现问题。
在第二种方法中,我们隐藏底部栏,但这会导致出现空白(有时最初更大,然后抖动动画到更小的尺寸)。我不确定它是否与插入符号有关,因为出现了一个与空白匹配的正方形,但它在布局检查器中没有任何可用的名称或选择,如here所示。
现在,我不太确定如何提出这个问题,因为我真的很茫然。如果有人在尝试设置时遇到类似问题,我想在这里寻求任何见解或指导 🙇u200d♂️
非常感谢!
嗯,在阅读另一个问题的一些不相关的内容后,我偶然发现了对
android:windowSoftInputMode="adjustResize"
标签中使用的 <activity>
的引用,而不是 <application>
标签。
从应用程序标签移至活动标签解决了我的所有问题 😭
希望这可以帮助将来的人不要犯像我一样的新手错误!