2016-03-25 11 views
0

Ich arbeite mit einem Multiple View Projekt mit FXML, generiert vom Gluon Plugin für IntelliJ.Gluon mobile TextArea Softkeyboard Ausgabe

Ich habe eine Ansicht (Scanansicht) neben der generierten primären und sekundären Ansicht hinzugefügt und Code für die Navigation in der GluonApplication-Klasse bereitgestellt.

Das erste Mal, wenn ich zur Scan-Ansicht navigiere, blinkt ein Carret im Textfeld, aber die Soft-Tastatur auf meinem Android-Gerät wird nicht angezeigt. Wenn ich zu einer anderen Ansicht navigiere, zeigt sich die Tastatur kurz und verschwindet nach einer Sekunde. Wenn ich dann zurück zur Scan-Ansicht navigiere, wird die Soft-Tastatur angezeigt. Und schließlich, wenn ich Fokus aus dem Textfeld mit der Zurück-Taste auf meinem Android-Gerät zurückziehen, ist es nicht möglich, den Fokus durch Tippen auf das Textfeld wiederherzustellen.

Alle Infos willkommen, Prost.

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(); 
    } 
} 

Antwort

1

Dies war ein bekanntes Problem, aber es scheint es nur für Fest wurde Textfelder: https://bitbucket.org/javafxports/8u-dev-rt/commits/ef07043d5739ace78568f20d7bc89ba0cf60c4e0

Ich habe gerade eine Pull-Anforderung, die auch dieses Problem für TextArea- beheben: https://bitbucket.org/javafxports/8u-dev-rt/pull-requests/5/fix-jfxport-41/diff

Die neue Version von JavaFXPorts (Version 8.60.7) ist geplant, irgendwo nächste Woche erstellt werden. Diese Korrekturen sind in JavaFXPorts 8.60.7 enthalten, die released on March 31, 2016 war.

Verwandte Themen