键盘弹出时,列不会滚动

13

我希望使用Jetpack Compose来开发我的下一个Android应用。我知道它是新的且处于Alpha状态。

我想使用这个代码实现一个登录界面。但当键盘打开时,它就无法正常工作了 :-(

enter image description here

private val items = listOf(Tab.Home)

private sealed class Tab(@StringRes val resourceId: Int) {
    object Home : Tab(R.string.home)
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApplicationTheme {
                Surface(color = MaterialTheme.colors.background) {
                    Scaffold(
                        topBar = {
                            TopAppBar(
                                title = {
                                    Text(text = "Home")
                                }
                            )
                        },
                        bottomBar = {
                            BottomNavigation {
                                items.forEach { screen ->
                                    BottomNavigationItem(
                                        icon = { Icon(Icons.Filled.Favorite, null) },
                                        label = { Text(stringResource(screen.resourceId)) },
                                        selected = true,
                                        onClick = { /* ... */
                                        }
                                    )
                                }
                            }
                        }
                    ) {
                        Column(
                            Modifier.verticalScroll(rememberScrollState()).padding(16.dp)
                        ) {
                            Text(text = "Lorem ipsum ...")
                            Spacer(modifier = Modifier.height(32.dp))
                            Text(text = "Lorem ipsum ...")
                            Spacer(modifier = Modifier.height(32.dp))
                            Text(text = "Lorem ipsum ...")
                            Spacer(modifier = Modifier.height(32.dp))
                            TextField(
                                value = "",
                                label = { Text("Name", color = MaterialTheme.colors.onPrimary.copy(alpha = 0.5f)) },
                                onValueChange = { /*TODO*/ },
                                modifier = Modifier.fillMaxWidth()
                            )
                            Spacer(modifier = Modifier.height(16.dp))
                            TextField(
                                value = "",
                                label = { Text("Password", color = MaterialTheme.colors.onPrimary.copy(alpha = 0.5f)) },
                                onValueChange = { /*TODO*/ },
                                modifier = Modifier.fillMaxWidth()
                            )
                            Spacer(modifier = Modifier.height(16.dp))
                            Button(
                                content = { Text("Login") },
                                onClick = { /*TODO*/ },
                            )
                        }
                    }
                }
            }
        }
    }
}

我用了这个可以垂直滚动的列,但是当该列的某些部分在键盘后面时,它就无法滚动。

为了解决这个问题,我在清单文件中添加了 android:windowSoftInputMode="adjustResize|stateHidden"

现在我可以滚动那一列,但是键盘上方也有一个 bottomBar。bottomBar 遮盖了列底部的登录按钮。如果内容足够多,列会在键盘关闭时也滚动,并且按钮也会被 bottomBar 遮盖。

enter image description here

现在我有三个问题:

  1. 如何使列在打开键盘时可滚动,但没有 bottomBar 在键盘上方?

  2. 如何实现对焦文本字段的自动滚动?

  3. 如何防止 bottomBar 遮盖按钮?


你找到任何解决方案了吗? - Chirag Mittal
@ChiragMittal 不。 - Ralph Bergmann
这里有一个我发布了答案的类似主题的帖子 https://dev59.com/EVEG5IYBdhLWcg3wbNMC#67878918 - Jeremiah Stephenson
9
请在活动范围内添加android:windowSoftInputMode="adjustResize",而不是在应用程序范围内。 - Jurij Pitulja
@JurijPitulja在他的评论中的回答对我有用。 - Jim Kirkbride
显示剩余3条评论
1个回答

2
这是一个已知的问题(至少在我的经验中,与LazyColumn有关)。请随意给该错误打星。
在那个线程中,有一个hacky的解决方案,涉及到RelocationRequester(将可组合物重新定位以使其可见)和onfocusChanged,它告诉您何时进行重新定位。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接