new*_*our 11 android-jetpack-compose android-jetpack-compose-text
我有这个代码
setContent {
val items = mutableListOf<Int>().apply {
(1..100).forEach { add(it) }
}
LazyColumn {
items(items) { item ->
TextField("$item", {})
}
}
}
Run Code Online (Sandbox Code Playgroud)
与android:windowSoftInputMode="adjustResize"我的AndroidManifest.xml.
如果我单击TextField列表顶部的 a,我可以正常输入文本。
如果我单击TextField屏幕底部附近的 ,键盘会立即出现,然后很快消失,并阻止我输入文本。
TextField当位于屏幕底部时如何输入文字?谢谢!
Ric*_*per 11
您的键盘在出现短暂、闪亮的时刻后就会消失。原因如下:
你点击TextField,它会调用它的内置焦点请求程序,并通过调用适当的(或不适当的,谁说的)内部方法来请求操作系统的焦点,结果,键盘弹出(同样,内置的)机制。)并且您可以输入更多您想要的内容...只要该字段可见;或者用 Compose 术语来说,只要持有请求者的 Composable 就处于组合状态。
应该清楚的是,一旦拥有焦点请求者的可组合项离开屏幕,它就会被销毁(不是每次都会被销毁,只有某些特定情况才会被销毁......,但你的就是其中之一),当可组合项被销毁时,焦点请求者也被销毁。没有焦点请求者,没有焦点所有者——键盘消失了。
现在这非常重要,因为您使用的是一个LazyColumn懒惰的可组合项,它因无情地屠杀用户不再可见的可组合项而臭名昭著。因此,只要关注的是顶部(或其他“可见”)文本字段,它就会保持并按预期工作。然而,当键盘弹出时,底部的文本字段超出了可见范围,以至于它被屠杀(回收是技术术语,但这有什么有趣的呢?),剥夺了键盘的用途。
现在,这个懒惰的专栏就像任何罪犯一样,留下了线索,却没有注意到,这导致我们当场抓住了他。看到该专栏的实际运作确实非常有趣。
现在,解决方法包括使用列,而不是惰性列;使用自定义惰性可组合项创建您自己的惰性列,并手动处理可组合项的堆大小,以便最终字段不会失去组合。
就这样,你痊愈了。
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |