Codenameone 代号一-避免应用启动时Android上的屏幕大小变化

Codenameone 代号一-避免应用启动时Android上的屏幕大小变化,codenameone,Codenameone,这个问题对Android产生了两个不必要的影响: 在应用程序启动时执行一次SizeChangedListener 不想要 窗体背景的可见且不需要的大小调整 (使用选项Style.BACKGROUND\u IMAGE\u SCALED\u FILL)在应用程序启动后 刚刚开始 在三星Galaxy S8+上测试的以下代码生成此日志: 12-18 00:49:45.594 D/SizeChangedListener(17264):[EDT]0:0:0,22-初始屏幕大小:1080*2008 12-

这个问题对Android产生了两个不必要的影响:

  • 在应用程序启动时执行一次SizeChangedListener 不想要
  • 窗体背景的可见且不需要的大小调整 (使用选项
    Style.BACKGROUND\u IMAGE\u SCALED\u FILL
    )在应用程序启动后 刚刚开始
在三星Galaxy S8+上测试的以下代码生成此日志:

12-18 00:49:45.594 D/SizeChangedListener(17264):[EDT]0:0:0,22-初始屏幕大小:1080*2008 12-18 00:49:45.596输入/系统输出(17264):显示键盘错误 12-18 00:49:45.623 D/代号一(17264):sizechanged:1080 1945com.codename1.impl.android。CodenameOneView@10f7aa8 12-18 00:49:45.627 D/libEGL(17264):loaded/vendor/lib64/egl/libGLES_mali.so 12-18 00:49:45.633 I/WebViewFactory(17264):加载com.google.android.webview版本60.0.3112.107(代码311210750) 12-18 00:49:45.634 D/SizeChangedListener(17264):[EDT]0:0:0,61-调用“hi Form”上的SizeChangedListener… 12-18 00:49:45.635 D/SizeChangedListener(17264):[EDT]0:0:0,64-新屏幕尺寸:1080*1945

这是我用来复制此问题的非常简单的代码:

public void start() {
    if (current != null) {
        current.show();
        return;
    }
    Form hi = new Form("Hi World", BoxLayout.y());
    hi.add(new Label("Hi world"));
    Log.p("Initial Screen size: " + hi.getWidth() + " * " + hi.getHeight());
    hi.show();

    hi.addSizeChangedListener(l -> {
        Log.p("SizeChangedListener on \"hi Form\" invoked...");
        Log.p("New Screen size: " + hi.getWidth() + " * " + hi.getHeight());
    });

我们只是传递视图的大小和从Android获得的事件。原因可能与状态栏有关,状态栏可能在启动时隐藏,然后添加以实现兼容性


我们有一个RFE可以解决这个问题,尽管使用Android,它可能会在默认情况下不隐藏状态栏的其他设备中产生类似的问题…

在此期间,作为临时解决方法,我只是添加了
TestUtils.waitFor(500)就在
hi.show()之前。它(显然?)解决了表单背景不必要的大小调整问题。你能给我建议一个更好的解决办法吗?谢谢:)这不是你应该做的事情,因为它会导致崩溃。如果出现问题,我只会设置不同的背景模式。为什么会导致崩溃?在生命周期回调期间,您正在EDT上睡觉,这可能会导致操作系统认为应用程序没有响应,并将其杀死。