TextField 隐藏在键盘后面 - Jetpack Compose

Dha*_*val 7 android textfield android-jetpack-compose

我在玩 Jetpack ComposeTextField时发现键盘有一种奇怪的行为。

如果我的文本字段位于屏幕底部并且我打开键盘,则文本字段将保持隐藏在键盘后面。

我也尝试了一些解决方案。

  1. 修改android:windowSoftInputMode="adjustPan"android:windowSoftInputMode="adjustResize"

  2. 如果我使用 adjustmentPan,有时 TextField 会随着键盘抬起,但有时不会。


这是正在发生的事情的代码和图像。

在此输入图像描述

在此输入图像描述

Jho*_*ode 4

好吧,我做了一些对我有用的事情,我澄清一下,我只学习了几个星期的作曲,所以不要对我抱有太多期望,我只是做了一些可能不正确的事情,但它对我来说是有用的,可能对任何人都有用。

\n

我所做的是创建一个继承 ComponentActivity() 和所有玩具的主类。

\n
    class Login : ComponentActivity() {\n    \n        override fun onCreate(savedInstanceState: Bundle?) {\n    \n            super.onCreate(savedInstanceState)\n            setContent {\n    \n                HealthAtHansClientTheme {\n\n                    Surface(\n                        modifier = Modifier.fillMaxSize(),\n                        color = MaterialTheme.colors.background\n                    ) {\n                        LoginLayout()\n                    }\n                }\n            }\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

之后,我导入了 @Composable 函数,其中包含带有 LoginLayout 的布局,但重要的部分是:

\n
    val scrollState = rememberScrollState()\n    Column(\n        modifier = Modifier\n            .fillMaxWidth()\n            .fillMaxHeight()\n            .padding(bottom = 100.dp, end = 40.dp, start = 40.dp)\n            .verticalScroll(scrollState),\n        verticalArrangement = Arrangement.SpaceAround,\n\n    ) {\n\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(top = 30.dp)\n        ) {\n            Text(text = "Hola !", style = TextStyle(fontSize = 40.sp))\n        }\n\n        Row(horizontalArrangement = Arrangement.Center) {\n            Column(\n                verticalArrangement = Arrangement.Center,\n                horizontalAlignment = Alignment.CenterHorizontally\n            ) {\n\n\n                TextField(\n                    maxLines = 1,\n                    modifier = Modifier.fillMaxWidth(),\n                    value = documentNumber,\n                    onValueChange = { documentNumber = it })\n\n                Spacer(modifier = Modifier.height(100.dp))\n\n                TextField(\n                    maxLines = 1,\n                    modifier = Modifier.fillMaxWidth(),\n                    value = privateCode,\n                    onValueChange = { privateCode = it })\n\n\n            }\n\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,文本字段之间的间距为 100,这只是为了测试其功能。

\n

最后通过以下方式在我的主活动中声明 Login 类,因为 Mainactivity 默认情况下出现,但仅用于此测试,其想法只是让他们意识到我添加的行

\n

在此输入图像描述

\n

在此输入图像描述

\n

voil\xc3\xa0 现在我的 TextField 没有隐藏,我认为如果您有广泛的表单,您在清单中创建“活动”并添加行 android:windowSoftInputMode="adjustResize"\nthat这样问题就结束了。

\n

我希望有更多技能和知识的人可以做更有效的事情,目前它对我有用。

\n

在此输入图像描述

\n

如果已经有更有效的解决方案,欢迎评论,如果我的解决方案很愚蠢,我将不胜感激并提供反馈以供学习。

\n

发生的另一件事是,如果您使用“DefaultPreview”运行模拟器,我尝试的所有方法都不起作用。

\n

在此输入图像描述

\n

如果您在 App 中运行应用程序的模拟,则它可以正常工作。

\n

但我想更进一步,所以我在一个发布的 apk 版本中编译了这个示例,它应该看起来应该像它应该的那样,并且它可以完美地工作,如图所示。

\n

在此输入图像描述

\n