2013-12-05 3 views
10

Я разрабатываю Android игра с LibGDX. И мне нужно найти высоту мягкой клавиатуры, которую пользователь использует, так как я хочу отображать некоторые объекты прямо над клавиатурой.Как я могу найти высоту мягкой клавиатуры в приложении LibGDX

Я прочитал эту тему: how can i get soft keyboard height on android?

Но комментарий предполагает, что он не работает, и это также, кажется, для использования с Android SDK. Я не уверен. Кто-нибудь знает способ, который определенно будет работать?

+1

Здравствуйте, его уже год, но я думаю, что я нашел решение! прочитайте это сообщение: http://stackoverflow.com/questions/21467006/how-to-push-up-the-screen-when-soft-keybord-is-displayed/29981733#29981733 – Eric

ответ

3

Если ваша проблема в том, что ваши текстовые поля затемнены, то я предлагаю использовать

void Gdx.input.getTextInput(Input.TextInputListener listener, java.lang.String title, java.lang.String text)

вместо потому что будет генерировать машинный диалог ввода модальный текста, который перемещается вверх и вниз с помощью клавиатуры. Я также попытался получить высоту клавиатуры, но пока не справился.

См ответы на эту тему, а также: How do libgdx detect keyboard presence

1

Надеюсь кто-то найдет этот ответ полезным:

Там есть тренировки для определения точной высоты мягкой клавиатуры, которые включают активность Launcher для отправьте размер экрана в игру, когда произойдет событие изменения размера экрана.

Во-первых, установить макет слушателя на ViewTreeObserver от rootView вашего LauncherActivity:

public class AndroidLauncher extends AndroidApplication { 
//... 
    public void setListenerToRootView() { 
     final View activityRootView = getWindow().getDecorView().findViewById(android.R.id.content); 
     activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(keyboardLayoutListener); 
    } 

    private ViewTreeObserver.OnGlobalLayoutListener keyboardLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Rect visibleDisplayFrame = new Rect(); 
      getWindow().getDecorView().getWindowVisibleDisplayFrame(visibleDisplayFrame); 
      game.screenResize(visibleDisplayFrame.width(), visibleDisplayFrame.height()); 
     } 
    }; 
//... 
} 

Если вы пытаетесь получить высоту точки зрения корня, он не будет работать, как большинство игр на весь экран ,

Не забывайте добавлять и удалять слушателя соответствующих вхождений:

@Override 
protected void onCreate (Bundle savedInstanceState) { 
    //... 
    setListenerToRootView(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    removeListenerToRootView(); 
} 

public void removeListenerToRootView() { 
    final View activityRootView = getWindow().getDecorView().findViewById(android.R.id.content); 
    activityRootView.getViewTreeObserver().removeOnGlobalLayoutListener(keyboardLayoutListener); 
} 

Далее объявить метод screenResize внутри класса Game, который будет получать размеры и отправить его на текущем экране:

public class YourGame extends Game { 
//... 
public ScreenBase currentScreen; 
//... 
    public void screenResize(float width, float height) { 
     if(currentScreen != null) 
      currentScreen.onScreenResize(width, height); 
    } 
//... 
} 

Каждый экран, который включает изменение, должен реализовать метод onScreenResize. Ввести абстрактный базовый класс экрана с абстрактным методом onScreenResize. Переменная currentScreen должен быть установлен в конструкторе:

public abstract class ScreenBase implements Screen { 
//... 

public ScreenBase(YourGame game) { 
//... 
    this.game = game; 
    this.game.currentScreen = this; 
//.... 
} 

public abstract void onScreenResize(float width, float height); 

Реализовать это в зависимости от того, на экране вы хотите:

public class LoginScreen extends ScreenBase { 
//... 
    @Override 
    public void onScreenResize(final float width, final float height) { 
     if(Gdx.graphics.getHeight() > height) { 
      Gdx.app.log("LoginScreen", "Height of keyboard: " + (Gdx.graphics.getHeight() - height)); 
     } 
    } 
} 
Смежные вопросы