Glion Mobile中以JavaFX TextField为中心的属性问题
在我看来,将应用程序移植到移动设备(iOS)时,有几件事情正在进行Glion Mobile中以JavaFX TextField为中心的属性问题,javafx,gluon-mobile,Javafx,Gluon Mobile,在我看来,将应用程序移植到移动设备(iOS)时,有几件事情正在进行 当我通过触摸文本字段开始滚动时,文本字段的焦点会在滚动期间固定在屏幕上 我对字段进行了一些验证,这样当字段失去焦点时,会弹出一个模式来指定错误。然而,在iPhone中,文本字段保持焦点并显示在对话框上 请注意,我使用的是JavaFX原生触摸字段,而不是glion版本,因为我对TextField的glon版本的focusedProperty有问题。它的工作方式是,如果输入无效,它会将字段的值设置为空字符串并打开对话框 我尝试了以下
您所面临的问题将发生在JavaFX
TextField
和glion's上,因为后者在内部使用内置的JavaFX控件
iOS上出现问题的原因是:当JavaFXTextField
获得焦点时,会在控件顶部添加一个本机iOSUITextField
,基本上是为了启用与本机软件键盘的交互
您可以看到textfieldphavior
在iOS上有一个:
这直接涉及到本地人:
到目前为止,只要在本地UITextField
可见时不滚动和移动JavaFXTextField
初始位置,就可以正常工作
还要注意,带有本机控件的iOS层位于JavaFX层的顶部(这就是为什么您一直看到对话框顶部的本机编辑器)
有一个开放的PR,支持在出现软件键盘时更新本机控件位置,转换JavaFX和iOS控件,并引入updateBounds
,可在滚动事件移动文本字段时使用
同时,您必须添加一些解决方法,以防止在文本字段
处于焦点时滚动。您知道如何处理该对话框问题吗?在弹出打开对话框之前,我曾尝试向另一个控件请求焦点,但这不起作用。
private void handleFocusChange() {
TextField textField = getControl();
if (textField.isFocused()) {
if (PlatformUtil.isIOS()) {
...
textField.getScene().getWindow().impl_getPeer().requestInput(text, type.ordinal(), w, h,
trans.getMxx(), trans.getMxy(), trans.getMxz(), trans.getMxt(),// + insets.getLeft(),
trans.getMyx(), trans.getMyy(), trans.getMyz(), trans.getMyt(),// + insets.getTop(),
trans.getMzx(), trans.getMzy(), trans.getMzz(), trans.getMzt(), textField.getFont().getSize());
...
}
}
}
UITextField* textField = [[UITextField alloc] initWithFrame:CGRectMake(mxt + 1, myt + 1, mxx * (width - 2), myy * (height - 2))];