2016-08-10 8 views
1

Я пытаюсь поймать кнопку «Назад», когда TextField сфокусирован (клавиатура видна).LibGDX - как поймать подкладку внутри TextField с клавиатурой Android?

Я уже пробовал с Multiplexer - установив «BackProcessor» на вершине этапов - это не работает:

InputProcessor backProcessor = new InputAdapter() { 
     @Override 
     public boolean keyDown(int keycode) { 

      if ((keycode == Input.Keys.BACK)) 
      { 
       Gdx.app.log("INPUT", "BACK"); 
      } 
      return false; 
     } 
    }; 

    InputMultiplexer multiplexer = new InputMultiplexer(backProcessor, 
      loginStage,registerStage); 
    Gdx.input.setInputProcessor(multiplexer); 

Кроме того, я попытался в методе render с:

if(Gdx.input.isKeyDown(Keys.BACK) 

Не работает.

Выше решения отлично работают ЗА ИСКЛЮЧЕНИЕМ момент, когда клавиатура видна.

Что я пытаюсь достичь? Мне нужно поймать кнопку «Назад», когда отображается экран onScreenKeyboard.

Редактировать

Я также попытался с TextFieldListener но «BackButton» является один ключ, который не имеет никакого «обугленного кода», поэтому он не может быть пойманной там:

public void keyTyped(TextField textField, char c) 

FINAL EDIT

Как заявили авторы LibGDX - нет никакого способа получить это обычным способом, потому что кнопка «Назад» выполняется за пределами приложения, когда она нажата, когда клавиатура видна. Android-решение должно переопределить EditTextonPreKeyIme(), но LibGDX TextField не имеет ничего общего с Android, и нет никакого соединения.

Если есть кто-нибудь, кто мог бы указать любое решение этой проблемы, я был бы признателен.

ответ

0

Перепишите свой класс GDX Launcher с помощью этого учебника: https://github.com/libgdx/libgdx/wiki/Admob-in-libgdx

Тогда вы будете иметь свой RelativeLayout, так что вы можете переопределить dispatchKeyEventPreIme() метод который будет перехватывать события, прежде чем они направляются в IME;)

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


       if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
        if(event.getAction() == KeyEvent.ACTION_DOWN){ 
         // back pressed     } 

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

Ответ - невозможно. Android не улавливает кнопку «назад», пока активна клавиатура. Ха. У них даже нет возможности проверить, видна ли мягкая клавиатура, и есть ли уловки, чтобы поймать высоту представления (что дает высоту клавиатуры), что также делает все неправильным, потому что оно сталкивается с другими компонентами ui, такими как панель навигации/состояния и весь режим погружения.

Я надеюсь, что когда-нибудь какой-нибудь Google Dev посмотрит здесь, проверьте это и подумайте об исправлении этого через 6 лет, потому что мы в 2016 году, и вы исправляете код, а не критические ошибки, которые публикуются на трекере величайших кодеров отсюда.