android 无限进度隐藏完成屏幕

Infinite progress hide complety the screen on android

on Android 在带有 browserComponent 的表单中 Infinite progress hide complete 屏幕上看不到内容,在 IOS 上工作正常。

如果表单没有 BrowserComponent 在 Android 和 IOS 中工作正常并且屏幕变暗但我们可以看到内容。

附上示例代码(只有启动方法)

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

    Form hi2 = new Form("No browser Form", BoxLayout.y());

    hi2.add(new Button(new Command("Show Infinite Progress") {
         @Override
         public void actionPerformed(ActionEvent evt) {
             try {
               Dialog ip = new InfiniteProgress().showInfiniteBlocking();
                    new Thread(new Runnable() {
                    @Override
                    public void run() {
                            try {
                                Thread.sleep(2000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                       ip.dispose();
                    }
                }).start();

             } catch (Exception ex) {
                 ex.printStackTrace();
             }
      }
     }));   
    
    hi2.add(new Label("No browser Form"));
    hi2.add(new Button(new Command("show browser Form") {
        @Override
        public void actionPerformed(ActionEvent evt) {
            try {
                Form hi = new Form("browser Form");
                hi.setLayout(new BorderLayout());
                
                BrowserComponent browserComponent = new BrowserComponent();
                browserComponent.setURL("https://www.codenameone.com/");

                hi.add(BorderLayout.CENTER, browserComponent);

            
                hi.add(BorderLayout.SOUTH, new Button(new Command("Show Infinite Progress") {
                     @Override
                       public void actionPerformed(ActionEvent evt) {
                           try {
                               Dialog ip = new InfiniteProgress().showInfiniteBlocking();
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        try {
                                            Thread.sleep(2000);
                                        } catch (InterruptedException e) {
                                            e.printStackTrace();
                                        }
                                       ip.dispose();
                                    }
                                }).start();
 
                           } catch (Exception ex) {
                               ex.printStackTrace();
                           }
                    }
                   }));

            
                hi.show();
            } catch (Exception ex) {
                Dialog.show("Error", ex.getMessage(), "OK", null);
                ex.printStackTrace();
            }
        }
    }));
    hi2.show();
}

InfiniteProgress 创建一个 Dialog 显示在中心但有效地阻止周围的输入。 BrowserComponent 不适用于对话框,因为对话框的背景需要“绘制”并且不是真正的底层 Form

通常,解决方法是使用 InteractionDialog。您还可以使用 LayeredPane 来放置 InfiniteProgress 甚至适当地给它涂上颜色,这样它“看起来”就一样了。但是重现阻塞行为更难。我不确定您是否能够这样做,因为本机小部件会处理自己的事件。阻止来自 Codename One 组件的输入非常容易,但当您收到事件时,它可能已被本机小部件处理。

我能想到的这方面的唯一解决方法是在 JavaScript 中完成该部分。