我遇到了 LWUIT 的Textfield的问题。
在我的某些表单中,我显示CategoryBar,而在其他表单中,我隐藏它。
在我有Textfields的某些表单中,当我专注于一个表单并使虚拟键盘(VKB) 出现时,问题就会出现。当VKB出现时,屏幕组件会自行调整大小以适应Textfield在输入文本时可见,但是当我通过 VKB 上的后退按钮或返回键隐藏VKB时, Textfield仍然保持焦点,不仅如此,当屏幕组件调整自己的大小时,当前可见的Form也会调整自己的大小,就好像没有CategoryBar存在一样,所以任何位于Form底部的组件被CategoryBar隐藏。
这可以通过显示另一个 Form(这包括PopupChoiceGroup和DatePicker)然后返回到CategoryBar覆盖的Form来解决。
在没有CategoryBar可见的其他 Forms 中,有时在显示VKB时调整大小会导致 Forms 调整自己的大小,就好像CategoryBar是可见的,从而可以在它不应该可用时与之交互。
如何确保焦点完全丢失在Textfield上?此外,无论CategoryBar是否可见,如何确保正确调整 Form 的大小?
编辑
我一直在挖掘TextField、Form和VKB的类引用,后来我发现了一个名为autoAdjust的方法,根据文档:
自动调整对话框的大小。此方法由 sizeChanged事件触发。
方法sizeChanged听起来像是我应该检查的东西,在Form的参考中,该方法的描述是:
仅当表单的底层画布获得大小更改事件时,才会调用此方法。此方法将触发表单的重新布局。仅当此表单为当前表单时,此方法才会获取回调
这个方法看起来像是我正在寻找的调整大小的回调,所以我覆盖了它并放置了一个NotificatioBar来显示调用该方法时发送的宽度和高度值。
在我的设备上对此进行测试后我发现,当在显示或隐藏VKB后调整窗体大小时,高度值有时而不是270(显示CategoryBar时窗体的高度)它被发送为320(全屏高度,好像没有显示CategoryBar)。
到目前为止,我还无法理解为什么 Form 在调整自身大小时会忽略CategoryBar是否正在显示的事实。
我试图在其sizeChanged方法中更改 Form 高度,但Form不受它的影响。在我看来,我必须修改的是正在绘制表单的画布,但我不确定,因为画布隐藏在 LWUIT 中。
难道是我的表格正在绘制的画布是错误的吗?是什么引发了这种行为?