键盘打开时列不滚动

时间:2021-01-30 19:52:25

标签: android android-jetpack-compose

我想用 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覆盖按钮?

0 个答案:

没有答案
相关问题