Надеюсь кто-то найдет этот ответ полезным:
Там есть тренировки для определения точной высоты мягкой клавиатуры, которые включают активность 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));
}
}
}
Здравствуйте, его уже год, но я думаю, что я нашел решение! прочитайте это сообщение: http://stackoverflow.com/questions/21467006/how-to-push-up-the-screen-when-soft-keybord-is-displayed/29981733#29981733 – Eric