【问题标题】:keypad decreases the screen Height issue - codenameone键盘降低屏幕高度问题 - 代号
【发布时间】:2016-06-09 10:57:05
【问题描述】:

我在表单中有 TextField,当它获得焦点时,会出现一个小键盘。现在,如果我在此键盘上触摸返回命令,屏幕高度会降低。 我根据屏幕高度调整了一些填充。所以键盘会影响调整。如果我再次使用 textField 进入表单并在不打开键盘的情况下触摸返回图标,那么调整就可以了。如何解决?

在表单中搜索文本字段

Container searchContainer = new Container(new BoxLayout(BoxLayout.Y_AXIS));
f.add(searchContainer);

searchTextFieldGroup = new TextField();
searchContainer.add(searchTextFieldGroup);
searchTextFieldGroup.setHint("SEARCH TABLES");
searchTextFieldGroup.setUIID("tableSearchTextField");
searchTextFieldGroup.getAllStyles().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL));
searchTextFieldGroup.getAllStyles().setBgTransparency(0);
searchTextFieldGroup.getAllStyles().setMargin(2, 2, 2, 2);
searchTextFieldGroup.getAllStyles().setPadding(5, 5, 5, 0);
searchTextFieldGroup.getHintLabel().getAllStyles().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL));
searchTextFieldGroup.getHintLabel().getAllStyles().setFgColor(0xcccccc);

如果键盘在上面的表单中打开或关闭,屏幕高度会改变的主表单

screenWidth = Display.getInstance().getDisplayWidth();
screenHeight = Display.getInstance().getDisplayHeight();

Container menuContainer;
(mainContainer code......)

int excessHeight = Math.max(screenHeight - t.getPreferredH() - menuContainer.getPreferredH(), 0);
int excessWidth = Math.max(screenWidth - menuContainer.getPreferredW(), 0);
menuContainer.getAllStyles().setPadding(Component.TOP, excessHeight / 2);
menuContainer.getAllStyles().setPadding(Component.BOTTOM, excessHeight / 2);
menuContainer.getAllStyles().setPadding(Component.LEFT, excessWidth / 2);
menuContainer.getAllStyles().setPadding(Component.RIGHT, (excessWidth / 2));
f.revalidate

在关闭键盘的情况下单击返回按钮......在打开键盘的情况下进行返回

.......

如何添加设备键盘取消的高度?

f.addSizeChangedListener(e -> {
    screenWidth = Display.getInstance().getDisplayWidth();
    screenHeight = Display.getInstance().getDisplayHeight();

    int excessHeight1 = Math.max(screenHeight - t.getPreferredH() - menuContainer.getPreferredH(), 0);
    int excessWidth1 = Math.max(screenWidth - menuContainer.getPreferredW(), 0);
    menuContainer.getAllStyles().setPadding(Component.TOP, excessHeight / 2);
    menuContainer.getAllStyles().setPadding(Component.BOTTOM, excessHeight / 2);
    menuContainer.getAllStyles().setPadding(Component.LEFT, excessWidth / 2);
    menuContainer.getAllStyles().setPadding(Component.RIGHT, (excessWidth / 2));
        //Dialog.show("size change", "width " + screenWidth + " height " + screenHeight, "ok", null);
});

方向监听器被 sizeChangeListener 取消。如何解决?

f.addOrientationListener(new ActionListener() {
    public void actionPerformed(ActionEvent ev) {
        if (Display.getInstance().isPortrait()) {
            screenWidth = Display.getInstance().getDisplayWidth();
            screenHeight = Display.getInstance().getDisplayHeight();

            menuContainer.getAllStyles().setPadding(0, 0, 0, 0);
            menuContainer.getAllStyles().setMargin(0, 0, 0, 0);

            int excessHeight = Math.max(screenHeight - t.getPreferredH() - menuContainer.getPreferredH(), 0);
            int excessWidth = Math.max(f.getWidth() - menuContainer.getPreferredW(), 0);

            menuContainer.getAllStyles().setPadding(Component.TOP, excessHeight / 2);
            menuContainer.getAllStyles().setPadding(Component.BOTTOM, excessHeight / 2);
            menuContainer.getAllStyles().setPadding(Component.LEFT, excessWidth / 2);
            menuContainer.getAllStyles().setPadding(Component.RIGHT, (excessWidth / 2));
        } else if (!Display.getInstance().isPortrait()) {
            screenWidth = Display.getInstance().getDisplayWidth();
            screenHeight = Display.getInstance().getDisplayHeight();

            menuContainer.getAllStyles().setPadding(0, 0, 0, 0);
            menuContainer.getAllStyles().setMargin(0, 0, 0, 0);

            int excessHeight = Math.max(screenHeight - t.getPreferredH() - menuContainer.getPreferredH(), 0);
            int excessWidth = Math.max(f.getWidth() - menuContainer.getPreferredW(), 0);
            menuContainer.getAllStyles().setPadding(Component.TOP, excessHeight / 2);
            menuContainer.getAllStyles().setPadding(Component.BOTTOM, excessHeight / 2);
            menuContainer.getAllStyles().setPadding(Component.LEFT, excessWidth / 2);
            menuContainer.getAllStyles().setPadding(Component.RIGHT, (excessWidth / 2) - 5);
            f.revalidate();
        }
    }
});

【问题讨论】:

  • 可以加截图和代码吗?从描述中不清楚您正在经历什么。
  • 嗨@Chen 我已经添加了代码和截图。我添加了填充以使容器位于表单的中心。另外我需要容器的高度和宽度等于屏幕高度和屏幕宽度。

标签: java codenameone


【解决方案1】:

很可能在打开键盘时更改了大小,而excessHeight 的值非常小。 将相同的代码(第二个块)放在 Form sizeChanged() 子句中。

【讨论】:

  • 将代码(第二块)放入 sizeChangedListener 不会做任何事情。我想我需要在 sizeChanged 方法中添加键盘取消的高度。如何获得键盘高度?我在表单中也有方向侦听器,但是当我添加 sizechangeListener 时,方向侦听器不起作用。这是为什么。我已经在问题中添加了代码。
  • 嗨,sizechangedListener 也改变了orientationListener。有什么解决办法吗?我想知道单击后退按钮时是否可以自动关闭键盘,问题将得到解决。我该怎么做
  • 您选择的定位方法是有问题的,因为屏幕尺寸会随着设备方向或具有多任务(多窗口/分屏等)的较新设备而变化。我建议将容器包装在绝对中心边框布局中,将其放置在中心并自动适应大小变化行为。
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 2011-12-15
  • 2012-07-02
  • 2011-05-11
  • 1970-01-01
  • 2018-05-17
  • 2013-05-13
  • 2020-11-19
相关资源
最近更新 更多