应用停止/恢复后,将Codename One组件保持在无效位置

时间:2018-10-01 10:29:09

标签: codenameone

我的问题是在应用停止/恢复后将组件保持在分层窗格中的无效位置。我有一个不错的动画,它可以在分层窗格中移动某些组件,并且我希望这些组件保持其位置,直到用户与它们交互为止。

我了解到,当应用程序进入后台时,将调用stop()方法:该方法在current变量中存储当前的Form引用。然后,在恢复应用程序时,将调用start()方法,特别是以下代码:

if (current != null) {
    current.show();
    return;
}

此方法的问题在于该应用程序没有像原来那样“完全”恢复,因为current.show()似乎在重新验证当前表单的分层窗格(我不希望{{1} },因为我使用revalidate),所以分层窗格中的某些组件处于无效位置。

作为一种解决方案,我尝试在animateUnlayout方法中注释current.show();,但是此方法不起作用(仅在模拟器中有效,在真正的Android和iOS设备上无效,应用停止/恢复后仍然可以重新验证分层窗格。

您知道在应用停止/恢复后如何将每个组件保持在其位置上(不重复将组件移动到无效位置的相同动画)吗?

1 个答案:

答案 0 :(得分:1)

当我们从挂起状态恢复或设备旋转时,我们需要将组件布置到其自然位置。唯一的解决方法是通过安装伪造的组件来完全禁用布局管理器。这本质上将阻止布局的发生。我不确定是否存在有效的用例,如果只是视觉动画,可能会有更好的方法。

cnt.setLayout(new Layout() {
    @Override
    public void layoutContainer(Container parent) {
    }

    @Override
    public Dimension getPreferredSize(Container parent) {
        return new Dimension(getDisplayWidth(), getDisplayHeight());
    }
});