软键盘与jetpack撰写视图的内容重叠

时间:2020-09-24 16:15:26

标签: android android-layout android-jetpack-compose

假设我有一些关于jetpack撰写内容的活动

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ScrollableColumn(
                modifier = Modifier
                    .fillMaxSize()
                    .border(4.dp, Color.Red)
            ) {
                val (text, setText) = remember { mutableStateOf("") }

                TextField(
                    value = text,
                    onValueChange = setText,
                    label = {},
                    modifier = Modifier
                        .fillMaxWidth()
                )

                for (i in 0..100) {
                    Text("Item #$i")
                }
            }
        }
    }

}

如果我要启动此活动并专注于TextField,则会弹出一个软件键盘。

但是,该接口不会对此作出反应。 ScrollableColumn的底部边框(.border(4.dp, Color.Red))和第100个项目(Text("Item #$i"))都不可见。

换句话说,软件键盘会覆盖内容。

我如何使jetpack组成可见区域的变化(由于软件键盘)?

1 个答案:

答案 0 :(得分:4)

您可以使用标准的android过程,但我不知道是否存在Compose特定方式。

如果将SoftInputMode设置为SOFT_INPUT_ADJUST_RESIZE,则在更改键盘后布局将重新调整大小。

class YourActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        
        setContent { /* Composable Content */ }
    }
}

否则,您可以在清单中使用这些标志。浏览此处获取更多信息: Move layouts up when soft keyboard is shown?