此问题会在Android上产生两个不需要的效果:
SizeChangedListener
(在app启动时)的一次执行;Style.BACKGROUND_IMAGE_SCALED_FILL
)。以下代码在Samsung Galaxy S8 +上测试,生成此日志:
12-18 00:49:45.594 D / SizeChangedListener(17264):[EDT] 0:0:0,22 - 初始屏幕尺寸:1080 * 2008 12-18 00:49:45.596 I / System.out(17264): showKeyboard false 12-18 00:49:45.623 D / Codename One(17264):sizechanged:1080 1945 com.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获得的事件。其原因可能与状态栏有关,状态栏可能在启动时隐藏,然后添加以便兼容。
我们有一个针对enable status bar hiding on Android的RFE可能会解决这个问题,虽然在Android上它可能会在其他默认情况下未隐藏状态栏的设备中创建类似的问题...