2016-06-03 4 views
1

Ich habe TextField in einem Formular und wenn es fokussiert ist, erscheint eine Tastatur. Wenn ich nun mit dieser Tastatur den Zurückbefehl berühre, verringert sich die Bildschirmhöhe. Ich habe einige Padding in Bezug auf Bildschirmhöhe angepasst. Die Tastatur beeinflusst also die Einstellungen. Und wenn ich wieder zum Formular mit TextField und Touch-Back-Icon gehe, ohne das Keypad eingeschaltet zu haben, dann sind die Anpassungen in Ordnung. Wie man es löst?Tastatur verringert den Bildschirm Höhe Problem - codenameone

Suche Textfeld in einem Formular

Container searchContainer = new Container(new BoxLayout(BoxLayout.Y_AXIS)); 
f.add(searchContainer); 

searchTextFieldGroup = new TextField(); 
searchContainer.add(searchTextFieldGroup); 
searchTextFieldGroup.setHint("SEARCH TABLES"); 
searchTextFieldGroup.setUIID("tableSearchTextField"); 
searchTextFieldGroup.getAllStyles().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL)); 
searchTextFieldGroup.getAllStyles().setBgTransparency(0); 
searchTextFieldGroup.getAllStyles().setMargin(2, 2, 2, 2); 
searchTextFieldGroup.getAllStyles().setPadding(5, 5, 5, 0); 
searchTextFieldGroup.getHintLabel().getAllStyles().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL)); 
searchTextFieldGroup.getHintLabel().getAllStyles().setFgColor(0xcccccc); 

Hauptform, wo die Bildschirmhöhe ändert sich, wenn Tastatur ein- oder ausgeschaltet in obigen Form ist

screenWidth = Display.getInstance().getDisplayWidth(); 
screenHeight = Display.getInstance().getDisplayHeight(); 

Container menuContainer; 
(mainContainer code......) 

int excessHeight = Math.max(screenHeight - t.getPreferredH() - menuContainer.getPreferredH(), 0); 
int excessWidth = Math.max(screenWidth - menuContainer.getPreferredW(), 0); 
menuContainer.getAllStyles().setPadding(Component.TOP, excessHeight/2); 
menuContainer.getAllStyles().setPadding(Component.BOTTOM, excessHeight/2); 
menuContainer.getAllStyles().setPadding(Component.LEFT, excessWidth/2); 
menuContainer.getAllStyles().setPadding(Component.RIGHT, (excessWidth/2)); 
f.revalidate 

zurück BTN off mit Tastatur geklickt ..... ........ gesichert mit Tastatur auf

enter image description here ....... enter image description here

Wie wird die von der Gerätetastatur abgebrochene Höhe hinzugefügt?

f.addSizeChangedListener(e -> { 
    screenWidth = Display.getInstance().getDisplayWidth(); 
    screenHeight = Display.getInstance().getDisplayHeight(); 

    int excessHeight1 = Math.max(screenHeight - t.getPreferredH() - menuContainer.getPreferredH(), 0); 
    int excessWidth1 = Math.max(screenWidth - menuContainer.getPreferredW(), 0); 
    menuContainer.getAllStyles().setPadding(Component.TOP, excessHeight/2); 
    menuContainer.getAllStyles().setPadding(Component.BOTTOM, excessHeight/2); 
    menuContainer.getAllStyles().setPadding(Component.LEFT, excessWidth/2); 
    menuContainer.getAllStyles().setPadding(Component.RIGHT, (excessWidth/2)); 
     //Dialog.show("size change", "width " + screenWidth + " height " + screenHeight, "ok", null); 
}); 

Ausrichtung Listener wird durch sizeChangeListener aufgehoben. Wie man es repariert?

f.addOrientationListener(new ActionListener() { 
    public void actionPerformed(ActionEvent ev) { 
     if (Display.getInstance().isPortrait()) { 
      screenWidth = Display.getInstance().getDisplayWidth(); 
      screenHeight = Display.getInstance().getDisplayHeight(); 

      menuContainer.getAllStyles().setPadding(0, 0, 0, 0); 
      menuContainer.getAllStyles().setMargin(0, 0, 0, 0); 

      int excessHeight = Math.max(screenHeight - t.getPreferredH() - menuContainer.getPreferredH(), 0); 
      int excessWidth = Math.max(f.getWidth() - menuContainer.getPreferredW(), 0); 

      menuContainer.getAllStyles().setPadding(Component.TOP, excessHeight/2); 
      menuContainer.getAllStyles().setPadding(Component.BOTTOM, excessHeight/2); 
      menuContainer.getAllStyles().setPadding(Component.LEFT, excessWidth/2); 
      menuContainer.getAllStyles().setPadding(Component.RIGHT, (excessWidth/2)); 
     } else if (!Display.getInstance().isPortrait()) { 
      screenWidth = Display.getInstance().getDisplayWidth(); 
      screenHeight = Display.getInstance().getDisplayHeight(); 

      menuContainer.getAllStyles().setPadding(0, 0, 0, 0); 
      menuContainer.getAllStyles().setMargin(0, 0, 0, 0); 

      int excessHeight = Math.max(screenHeight - t.getPreferredH() - menuContainer.getPreferredH(), 0); 
      int excessWidth = Math.max(f.getWidth() - menuContainer.getPreferredW(), 0); 
      menuContainer.getAllStyles().setPadding(Component.TOP, excessHeight/2); 
      menuContainer.getAllStyles().setPadding(Component.BOTTOM, excessHeight/2); 
      menuContainer.getAllStyles().setPadding(Component.LEFT, excessWidth/2); 
      menuContainer.getAllStyles().setPadding(Component.RIGHT, (excessWidth/2) - 5); 
      f.revalidate(); 
     } 
    } 
}); 
+1

Können Sie Screenshots und Code hinzufügen? Aus der Beschreibung geht nicht hervor, was Sie gerade erleben. – Chen

+0

Hi @Chen Ich habe Code und Screenshots hinzugefügt. Ich habe das Padding hinzugefügt, um den Container in der Mitte des Formulars zu platzieren. Außerdem benötige ich die Höhe und Breite des Behälters gleich der Bildschirmhöhe und Bildschirmbreite. –

Antwort

1

Es ist sehr wahrscheinlich, dass die Größe geändert wird, wenn die Tastatur geöffnet ist und Sie einen sehr kleinen Wert für die excessHeight bekommen. Setzen Sie denselben Code (den zweiten Block) in Ihre Form sizeChanged() -Klausel.

+0

Putting-Code (2. Block) in sizeChangedListener tut nichts. Ich denke, dass ich die Höhe hinzufügen muss, die durch Tastatur in sizeChanged-Methode abgebrochen wird. Wie kann ich die Tastaturhöhe bekommen? Ich habe auch Orientierungs-Listener in der Form, aber wenn ich sizechangeListener hinzugefügt, funktioniert der Orientation-Listener nicht. Warum das. Ich habe den Code in der Frage hinzugefügt. –

+0

Hi der sizechangedListener ändert auch den orientationListener. Gibt es Arbeit? Ich frage mich, ob ich die Tastatur automatisch schließen kann, wenn die Zurück-Schaltfläche geklickt wird, wird das Problem gelöst. Wie kann ich das tun? –

+1

Der Ansatz, den Sie für die Positionierung ausgewählt haben, ist problematisch, da sich die Bildschirmgröße mit der Geräteausrichtung oder in neueren Geräten mit Multitasking (Muti-Fenster/Splitscreen usw.) ändern kann. Ich würde vorschlagen, den Container in ein absolutes Center-Border-Layout zu verpacken, das ihn in die Mitte stellt und automatisch an Größenänderungsverhalten anpasst. –