CodenameOne键盘滚动问题

CodenameOne键盘滚动问题,codenameone,Codenameone,当显示的表单不适合屏幕时,我可以按预期滚动到底部。然后,当我按下其中一个字段时,键盘会显示出来,当键盘打开时,我可以滚动到屏幕底部(再次,如预期的那样),与我按下的字段无关 示例屏幕截图: 无键盘滚动至底部: 使用键盘滚动至底部: 但是,当显示不适合屏幕的表单时,当键盘处于活动状态时,表单不会滚动,隐藏字段。 在本例中,我减少了适合屏幕的字段数量,当我按下键盘显示时不会隐藏的字段之一时,我无法向下滚动到最后一个字段(总共14个字段): 当我最初按下键盘上隐藏的字段(如最后一个字段)时,我再

当显示的表单不适合屏幕时,我可以按预期滚动到底部。然后,当我按下其中一个字段时,键盘会显示出来,当键盘打开时,我可以滚动到屏幕底部(再次,如预期的那样),与我按下的字段无关

示例屏幕截图:

无键盘滚动至底部:

使用键盘滚动至底部:

但是,当显示不适合屏幕的表单时,当键盘处于活动状态时,表单不会滚动,隐藏字段。 在本例中,我减少了适合屏幕的字段数量,当我按下键盘显示时不会隐藏的字段之一时,我无法向下滚动到最后一个字段(总共14个字段):

当我最初按下键盘上隐藏的字段(如最后一个字段)时,我再次能够滚动:

是否有一种方法可以确保在由于键盘原因而隐藏内容时始终滚动

此操作的代码:

public void start() {
    if (current != null) {
        current.show();
        return;
    }
    Form hi = new Form();

    for (int i = 0; i < 20; i++) {
        hi.addComponent(getEntry(i + 1));
    }
    hi.show();
}

public Container getEntry(int val) {
    Container c = new Container();
    c.setLayout(new BorderLayout());
    TextField tf = new TextField() {
        @Override
        protected Dimension calcPreferredSize() {
            return new Dimension(Display.getInstance().getDisplayWidth(), 70);
        }
    };
    tf.setConstraint(TextField.DECIMAL);
    tf.setText(val + "");
    c.add(BorderLayout.CENTER, tf);
    return c;

}
public void start(){
如果(当前!=null){
current.show();
返回;
}
表单hi=新表单();
对于(int i=0;i<20;i++){
hi.addComponent(getEntry(i+1));
}
嗨,show();
}
公共容器getEntry(int val){
容器c=新容器();
c、 setLayout(新的BorderLayout());
TextField=newtextfield(){
@凌驾
受保护的维度calcPreferredSize(){
返回新维度(Display.getInstance().getDisplayWidth(),70);
}
};
tf.setConstraint(TextField.DECIMAL);
tf.setText(val+);
c、 添加(BorderLayout.CENTER,tf);
返回c;
}
这两个测试之间的唯一区别是
i
的值,这样我就有了比屏幕所能显示的更多的字段,或者刚好足够。在我的例子中,值分别为
20
14


这是使用Android设备测试的。

似乎这仍然是一个未决问题,请检查此处:

该问题与此无关。在过去,每次你开始滚动键盘时,键盘都会自动折叠这听起来像是虚拟键盘的错误行为,它可能会测试
iscrollable()
标志,这在本例中是正确的,因此会尝试对此“聪明”。请就此提出问题。