2017-02-28 2 views
1

Ich habe Schauspieler, die ich bewegen muss, wenn die Tastatur sichtbar wird (Wenn ich eine TextField drücke), oder sie stecken dahinter. Ich mache das, indem ich die Kamera hochfahre:LibGdx: Bewegen Sie die Kamera mit der Tastatur sichtbar, erfassen Android BACK-Taste

stage.getViewport().getCamera().position.set(stage.getWidth()/2, stage.getHeight()/3, 0); 
stage.getViewport().getCamera().update(); 

Das funktioniert gut. Es funktioniert auch gut, ihn zu bewegen zurück, wenn ich etwas außerhalb des TextField berühren und rufen stage.unfocusAll();

Mein Problem ist, wenn ich in einer TextField und drücken Androids Zurück-Taste bin, ist es mit der Tastatur versteckt, aber nicht nennen Sie den Code ich habe in der Inputprocessor (DIESER CODE CAPTURES bACK-TASTE IMMER AUSSER wenn sie in einem Textfeld und Tastatur zu sehen ist):

InputProcessor backProcessor = new InputAdapter() { 
      @Override 
      public boolean keyDown(int keycode) { 
       if ((keycode == Input.Keys.ESCAPE) || (keycode == Input.Keys.BACK)) 
       { 
        moveBack(); 
       } 
       return false; 
      } 
     }; 

ich sah mich um und las, dass es nicht möglich ist, die back-Taste zu fangen, wenn in einem TextField. Was führt mich zu meinen Fragen:

  1. Dies muss ein häufiges Szenario sein (bewegte UI mit der Tastatur arbeiten), wie machen es andere Leute?
  2. Wenn andere Leute mich mögen (Kamera bewegen), wie gehst du mit der Android-Taste?

EDIT: Diese answer fängt die Back-Taste gedrückt, während in einem TextField, aber es hat im Android Launcher getan werden, also kann ich die Elemente nicht erreichen Ich brauche zu erreichen. Ich überschreibe auch alle anderen Aufrufe der BACK-Taste aus dem LibGdx-Projekt.

Antwort

0

Ok so mit Hilfe von This Ich habe eine Lösung funktioniert, aber es ist nicht sehr hübsch.

Grundsätzlich ich meine GDX Launcher Klasse umschreiben, und verwenden Sie den folgenden Code als Layout:

RelativeLayout layout = new RelativeLayout(this) { 
      @Override 
      public boolean dispatchKeyEventPreIme(KeyEvent event) { 


       if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
        if(event.getAction() == KeyEvent.ACTION_DOWN){ 
         game.setMoveBack(true);    } 

       } 
       return super.dispatchKeyEventPreIme(event); 
      } 
     }; 

Dann wird in der Render-Methode meiner Mainscreen (Bildschirm, dass alle anderen Bildschirme von erben), innerhalb der render-Methode, die ich nennen:

if(game.isMoveBack()){ 
      stage.getViewport().getCamera().position.set(stage.getWidth()/2, stage.getHeight()/2, 0); 
      stage.getViewport().getCamera().update(); 
      game.setMoveBack(false); 
     } 

wenn jemand einen einfacheren Weg, dies bitte zu tun hat, posten und Ill akzeptieren, dass als Antwort, aber für jetzt, das funktioniert, wenn jemand sich findet, wo ich :)

bin
Verwandte Themen