简体   繁体   English

Gluon移动TextArea软键盘问题

[英]Gluon mobile TextArea soft keyboard issue

I'm working with a multiple view project with FXML, generated by the Gluon plugin for IntelliJ. 我正在使用FXML的多视图项目,该项目由IntelliJ的Gluon插件生成。

I added a view (scan view) next to the generated primary and secondary view and provided code for navigation in the GluonApplication class. 我在生成的主视图和辅助视图旁边添加了一个视图(扫描视图),并在GluonApplication类中提供了用于导航的代码。

The first time I navigate to scan view, a carret blinks in the textarea but the soft keyboard on my android device is not shown. 我第一次导航到扫描视图时,carret在文本区域中闪烁,但是未显示我的android设备上的软键盘。 When I navigate to another view the keyboard briefly shows itself and disappears after a second. 当我导航到另一个视图时,键盘会短暂显示自己,并在一秒钟后消失。 Then when I navigate back to scan view, the soft keyboard does show. 然后,当我导航回扫描视图时,软键盘会显示。 And finally, when I retract focus from the textarea with the back button on my android device, it's not possible to regain focus by tapping the textarea. 最后,当我使用Android设备上的“后退”按钮从文本区域撤回焦点时,无法通过点击文本区域来重新获得焦点。

Any info welcome, cheers. 欢迎任何信息,欢呼。

GluonApplication.java: 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: 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: 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();
    }
}

This was a known issue, but it seems it was only fixed for TextFields: https://bitbucket.org/javafxports/8u-dev-rt/commits/ef07043d5739ace78568f20d7bc89ba0cf60c4e0 这是一个已知问题,但似乎仅针对TextFields已修复: https : //bitbucket.org/javafxports/8u-dev-rt/commits/ef07043d5739ace78568f20d7bc89ba0cf60c4e0

I've just created a pull request that will fix this issue for TextArea as well: https://bitbucket.org/javafxports/8u-dev-rt/pull-requests/5/fix-jfxport-41/diff 我刚刚创建了一个拉取请求,也将为TextArea解决此问题: https : //bitbucket.org/javafxports/8u-dev-rt/pull-requests/5/fix-jfxport-41/diff

The new release of JavaFXPorts (version 8.60.7) is planned to be created somewhere next week. 新版本的JavaFXPorts(版本8.60.7)计划在下周创建。 These fixes are included in JavaFXPorts 8.60.7, which was released on March 31, 2016 . 这些修复程序包含在2016年3月31日发布的 JavaFXPorts 8.60.7中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM