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 中完成该部分。
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 中完成该部分。