Gluon 移动 TextArea 软键盘问题
Gluon mobile TextArea soft keyboard issue
我正在使用 FXML 处理一个多视图项目,该项目由 IntelliJ 的 Gluon 插件生成。
我在生成的主视图和辅助视图旁边添加了一个视图(扫描视图),并在 GluonApplication class 中提供了导航代码。
我第一次导航到扫描视图时,一个小车在文本区域中闪烁,但我的 android 设备上的软键盘没有显示。
当我导航到另一个视图时,键盘会短暂显示并在一秒钟后消失。
然后,当我导航回扫描视图时,软键盘会显示。
最后,当我使用 android 设备上的后退按钮从文本区域收回焦点时,无法通过点击文本区域重新获得焦点。
欢迎任何信息,干杯。
GluonApplication.java:
public class GluonApplication extends MobileApplication {
public static final String PRIMARY_VIEW = HOME_VIEW;
public static final String SECONDARY_VIEW = "Product View";
public static final String SCAN_VIEW = "Scan View";
public static final String MENU_LAYER = "Side Menu";
@Override
public void init() {
//Add views.
addViewFactory(PRIMARY_VIEW, () -> (View) new PicklistView().getView());
addViewFactory(SECONDARY_VIEW, () -> (View) new ProductView().getView());
addViewFactory(SCAN_VIEW, () -> (View) new ScanView().getView());
//Navigation side bar configuration.
NavigationDrawer drawer = new NavigationDrawer();
NavigationDrawer.Header header = new NavigationDrawer.Header("Gluon Mobile",
"Multi View Project",
new Avatar(21, new Image(GluonApplication.class.getResourceAsStream("/icon.png"))));
drawer.setHeader(header);
final Item primaryItem = new Item("Picklist", MaterialDesignIcon.HOME.graphic());
final Item secondaryItem = new Item("Product", MaterialDesignIcon.DASHBOARD.graphic());
final Item scanItem = new Item("Scan", MaterialDesignIcon.DASHBOARD.graphic());
drawer.getItems().addAll(primaryItem, secondaryItem, scanItem);
drawer.selectedItemProperty().addListener((obs, oldItem, newItem) -> {
hideLayer(MENU_LAYER);
if (newItem.equals(primaryItem)) {
switchView(PRIMARY_VIEW);
} else if (newItem.equals(secondaryItem)) {
switchView(SECONDARY_VIEW);
} else {
switchView(SCAN_VIEW);
}
});
addLayerFactory(MENU_LAYER, () -> new SidePopupView(drawer));
}
scan.fxml:
<?import com.gluonhq.charm.glisten.mvc.View?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<View fx:id="scan" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="350.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.essers.pxl2016.scan.views.ScanPresenter">
<center>
<VBox alignment="TOP_CENTER" BorderPane.alignment="CENTER">
<children>
<Label fx:id="label" text="scan output label">
<VBox.margin>
<Insets bottom="5.0" />
</VBox.margin></Label>
<TextArea fx:id="input" />
</children>
</VBox>
</center>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</View>
ScanPresenter:
public class ScanPresenter {
@FXML
private View scan;
@FXML
private Label label;
@FXML
private TextArea input;
private String oldString;
public void initialize() {
scan.showingProperty().addListener((obs, oldValue, newValue) -> {
// Update app bar.
if (newValue) {
AppBar appBar = MobileApplication.getInstance().getAppBar();
appBar.setNavIcon(MaterialDesignIcon.MENU.button(e ->
MobileApplication.getInstance().showLayer(GluonApplication.MENU_LAYER)));
appBar.setTitleText("Scan");
appBar.getActionItems().add(MaterialDesignIcon.CLOSE.button(e ->
javafx.application.Platform.exit()));
}
});
input.textProperty().addListener((observable, oldValue, newValue) -> {
if (oldValue.equals(newValue)) {
return;
} else {
label.setText(newValue);
}
});
input.requestFocus();
}
}
这是一个已知问题,但似乎只针对 TextFields 进行了修复:https://bitbucket.org/javafxports/8u-dev-rt/commits/ef07043d5739ace78568f20d7bc89ba0cf60c4e0
我刚刚创建了一个拉取请求,它也将解决 TextArea 的这个问题:https://bitbucket.org/javafxports/8u-dev-rt/pull-requests/5/fix-jfxport-41/diff
JavaFXPorts 的新版本(版本 8.60.7)计划在下周某处创建。
这些修复包含在 released on March 31, 2016.
的 JavaFXPorts 8.60.7 中
我正在使用 FXML 处理一个多视图项目,该项目由 IntelliJ 的 Gluon 插件生成。
我在生成的主视图和辅助视图旁边添加了一个视图(扫描视图),并在 GluonApplication class 中提供了导航代码。
我第一次导航到扫描视图时,一个小车在文本区域中闪烁,但我的 android 设备上的软键盘没有显示。 当我导航到另一个视图时,键盘会短暂显示并在一秒钟后消失。 然后,当我导航回扫描视图时,软键盘会显示。 最后,当我使用 android 设备上的后退按钮从文本区域收回焦点时,无法通过点击文本区域重新获得焦点。
欢迎任何信息,干杯。
GluonApplication.java:
public class GluonApplication extends MobileApplication {
public static final String PRIMARY_VIEW = HOME_VIEW;
public static final String SECONDARY_VIEW = "Product View";
public static final String SCAN_VIEW = "Scan View";
public static final String MENU_LAYER = "Side Menu";
@Override
public void init() {
//Add views.
addViewFactory(PRIMARY_VIEW, () -> (View) new PicklistView().getView());
addViewFactory(SECONDARY_VIEW, () -> (View) new ProductView().getView());
addViewFactory(SCAN_VIEW, () -> (View) new ScanView().getView());
//Navigation side bar configuration.
NavigationDrawer drawer = new NavigationDrawer();
NavigationDrawer.Header header = new NavigationDrawer.Header("Gluon Mobile",
"Multi View Project",
new Avatar(21, new Image(GluonApplication.class.getResourceAsStream("/icon.png"))));
drawer.setHeader(header);
final Item primaryItem = new Item("Picklist", MaterialDesignIcon.HOME.graphic());
final Item secondaryItem = new Item("Product", MaterialDesignIcon.DASHBOARD.graphic());
final Item scanItem = new Item("Scan", MaterialDesignIcon.DASHBOARD.graphic());
drawer.getItems().addAll(primaryItem, secondaryItem, scanItem);
drawer.selectedItemProperty().addListener((obs, oldItem, newItem) -> {
hideLayer(MENU_LAYER);
if (newItem.equals(primaryItem)) {
switchView(PRIMARY_VIEW);
} else if (newItem.equals(secondaryItem)) {
switchView(SECONDARY_VIEW);
} else {
switchView(SCAN_VIEW);
}
});
addLayerFactory(MENU_LAYER, () -> new SidePopupView(drawer));
}
scan.fxml:
<?import com.gluonhq.charm.glisten.mvc.View?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<View fx:id="scan" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="350.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.essers.pxl2016.scan.views.ScanPresenter">
<center>
<VBox alignment="TOP_CENTER" BorderPane.alignment="CENTER">
<children>
<Label fx:id="label" text="scan output label">
<VBox.margin>
<Insets bottom="5.0" />
</VBox.margin></Label>
<TextArea fx:id="input" />
</children>
</VBox>
</center>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</View>
ScanPresenter:
public class ScanPresenter {
@FXML
private View scan;
@FXML
private Label label;
@FXML
private TextArea input;
private String oldString;
public void initialize() {
scan.showingProperty().addListener((obs, oldValue, newValue) -> {
// Update app bar.
if (newValue) {
AppBar appBar = MobileApplication.getInstance().getAppBar();
appBar.setNavIcon(MaterialDesignIcon.MENU.button(e ->
MobileApplication.getInstance().showLayer(GluonApplication.MENU_LAYER)));
appBar.setTitleText("Scan");
appBar.getActionItems().add(MaterialDesignIcon.CLOSE.button(e ->
javafx.application.Platform.exit()));
}
});
input.textProperty().addListener((observable, oldValue, newValue) -> {
if (oldValue.equals(newValue)) {
return;
} else {
label.setText(newValue);
}
});
input.requestFocus();
}
}
这是一个已知问题,但似乎只针对 TextFields 进行了修复:https://bitbucket.org/javafxports/8u-dev-rt/commits/ef07043d5739ace78568f20d7bc89ba0cf60c4e0
我刚刚创建了一个拉取请求,它也将解决 TextArea 的这个问题:https://bitbucket.org/javafxports/8u-dev-rt/pull-requests/5/fix-jfxport-41/diff
JavaFXPorts 的新版本(版本 8.60.7)计划在下周某处创建。
这些修复包含在 released on March 31, 2016.