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