gpt4 book ai didi

java-me - 如何在虚拟键盘隐藏时从 LWUIT 文本字段中移除焦点并正确调整表单大小?

转载 作者:行者123 更新时间:2023-12-02 03:32:51 25 4
gpt4 key购买 nike

我遇到了 LWUIT 的 Textfield 问题。

在我的一些表单中,我显示了一个 CategoryBar,而在其他表单中,我隐藏了它。

在一些我有文本字段的表单中,当我专注于其中一个并使虚拟键盘 (VKB) 出现时,问题就出现了。当 VKB 出现时,屏幕组件会自行调整大小以适应 Textfield 在输入文本时可见,但当我隐藏 VKB 时, 通过 VKB 上的后退按钮或返回键,Textfield 保持焦点,不仅如此,当屏幕组件自行调整大小时,当前可见的 < strong>Form 会自行调整大小,就好像没有 CategoryBar 存在一样,因此 Form 底部的任何组件都被 CategoryBar 隐藏.

这是通过显示另一个表单(包括 PopupChoiceGroupDatePicker)然后返回到被分类栏

在其他没有 CategoryBar 可见的表单中,有时在显示 VKB 时调整大小会导致表单自行调整大小,就像 CategoryBar> 是可见的,因此可以在它不可用时与其进行交互。

如何确保焦点完全集中在 Textfield 上?另外,无论 CategoryBar 是否可见,如何确保正确调整 Form 的大小?

编辑

我一直在挖掘 TextFieldFormVKB 的类引用,后来我发现了一个名为 autoAdjust 根据文档:

Auto adjust size of the dialog. This method is triggered from a sizeChanged event.

方法 sizeChanged 听起来像是我应该检查的东西,在 Form 的引用中,这个方法的描述是:

This method is only invoked when the underlying canvas for the form gets a size changed event. This method will trigger a relayout of the Form. This method will get the callback only if this Form is the Current Form

这个方法看起来像是我正在寻找的调整大小的回调,所以我覆盖它并放置一个 NotificatioBar 来显示调用该方法时发送的宽度和高度值。

我在我的设备上测试后发现,在显示或隐藏 VKB 后调整表单大小时,高度值有时不是 270 (显示 CategoryBar 时表单的高度)它被发送为 320(全屏高度,就好像没有 CategoryBar正在显示)。

到目前为止,我一直无法理解为什么表单会在调整自身大小时忽略显示或不显示 CategoryBar 这一事实。

我试图在其 sizeChanged 方法中更改表单高度,但 Form 未受其影响。在我看来,我必须修改的是绘制表单的 Canvas ,但我真的不确定,因为 Canvas 隐藏在 LWUIT 中。

会不会是绘制我的Form 的 Canvas 出了问题?是什么引发了这种行为?

最佳答案

目前,我找到了一种解决方法,可以避免我的组件被 CategoyBar 隐藏,因为在 VKB 隐藏后 Form 大小调整错误,对于 Form 错误调整大小并显示 CategoryBar 的场景(我不知道为什么如果我调用其 setVisibility 方法并传递 false,则可见。

首先我覆盖了 sizeChanged 方法:

protected void sizeChanged(int w, int h){
if(h > 270){
mainContainer.getStyle().setMargin(Component.BOTTOM, 50);
}
else{
mainContainer.getStyle().setMargin(Component.BOTTOM, 0);
}
}

我检查高度值,如果在显示 CategoryBar 时该值大于预期高度,那么我将 Container 的底部设置为 50,这样它就会可见。

但这还不够,因为如果我再次显示相同的表单并且它正确调整大小,那么 Container 将保持底部为 50。所以我也覆盖了 onShow 方法:

protected void onShow(){
int containerBottom = mainContainer.getStyle().getMargin(Component.BOTTOM);
if(this.getHeight() == 270 && containerBottom == 50){
mainContainer.getStyle().setMargin(Component.BOTTOM, 0);
}
}

我必须确定如果高度为 270 而容器底部为 50,则容器底部应为 0。

因为我还没有找到一种方法来避免让我的表单调整大小并在根本不应该显示时显示 CategoryBar,所以我认为自己没有完整的答案。如果我找到解决方法,将会更新。

编辑

我尝试通过在我拥有的每个 FormonShow 方法中调用 setVisibility 方法来显式设置显示/隐藏状态。到目前为止,我已经能够避免以前遇到的视觉问题。我不确定这个问题是由于 LWUIT 还是由于 J2ME 限制引起的,但这就是我解决它的方法。

关于java-me - 如何在虚拟键盘隐藏时从 LWUIT 文本字段中移除焦点并正确调整表单大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25648300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com