我正在尝试实现一个文本框,该文本框可以显示GWT的分数。因此,我有一个Canvas,可以绘制我想要的东西并接收KeyEvent和MouseEvent。
但是在Ipad(Safarie和Chrome)上,软件键盘没有显示,因此我创建了一个Composite并将Canvas与Textbox结合起来,在画布上的每个键或鼠标事件发生后,焦点便得到了聚焦。
但是软键盘不会每次都显示,所以我尝试了一下,可以看到,文本框似乎获得了焦点(它变成了蓝色的边界),但并不总是显示光标。
这不会在我的笔记本上发生。
聚焦和显示光标之间有什么区别吗?
我尝试过:
任何帮助,Christoph
public void setFocus(boolean b) {
// if (hasFocus) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute () {
t.setFocus(b);
}
});
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute () {
box.setFocus(true);
box.setText("x");
box.setCursorPos(0);
// box.setVisible(false);
// box.setVisible(true);
}
});
// t.setFocus(b);
// box.setFocus(b);
// }
}
iOS浏览器不允许以编程方式设置焦点,除非直接响应用户交互(即触摸)。我相信原因是为了防止网站无缘无故地打开虚拟键盘。
缺点是,它会出于正当理由使用setFocus()
网站。您不能在deferred命令中调用setFocus()
,因为这不会算作对用户交互的direct响应。
(更确切地说,您can用延迟的命令调用setFocus()
,但是您发现的效果不理想。)