2014-01-30 6 views
2

У меня в приложении для Android-приложения LibGDX есть таблица под некоторыми текстовыми полями (одна строка) и кнопка ниже (Отправить). Мой вопрос: как «скользить» по таблице, текстовым полям и кнопке, когда текстовое поле фокусируется (щелкните по нему), и появляется мягкая клавиатура? Другими словами, как сделать мягкую клавиатуру не для покрытия других моих объектов. Это решение может быть связано с этим вопросом: How can i find the height of soft-keyboard in a LibGDX applicationКак «нажимать» экран, когда отображается мягкий кнопочный ключ

Большое спасибо.

+0

Я никогда не пробовал, но постараюсь установить «Gdx.gl.glViewport» с высоты экранной клавиши до высоты экрана и обычной ширины. Я не уверен, если программная клавиша использует один и тот же видовой экран, но если это не так, как вы ищите. – Springrbua

+0

Привет, я попытался выяснить, о чем вы говорите, но я не смог :) Не могли бы вы дать мне подсказку? – JedyKnite

+0

Надеюсь, это поможет вам: http://www.acamara.es/blog/2012/02/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/. Затем «BlackBorders» должен быть вашим Softkeyboard. – Springrbua

ответ

0

android:windowSoftInputMode до adjustPan в вашем блоке <activity>, чтобы получить требуемый результат. См. Документы: https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

+1

Спасибо за быстрый ответ, я попробовал ваше решение, но он не работает с libGDX. Результат тот же, когда щелкнуто текстовое поле, нижние объекты покрываются мягкой клавиатурой. – JedyKnite

2

Я нашел обходной путь для своей проблемы, он работает, но я не думаю, что это слишком чисто. Итак, мой сценарий был:

  • стол контейнер, содержащий ScrollPane (другой таблицы), при этом прокруткой таблице два TextFields и под ними кнопку Отправить
  • контейнер столовый набор для заполнения родителя (полный экран)
  • текстовых поля и кнопка выравнивается по нижней части таблицы контейнера

проблема заключалась в том, когда OnscreenKeybord был виден, он охватывает нижние объекты (текстовые поля и кнопка) и часть прокрутки Таблица.

Мое решение/временное решение:

keyboard = new OnscreenKeyboard() { 
     @Override 
     public void show(boolean visible) { 
      Gdx.input.setOnscreenKeyboardVisible(visible); 
      // Hmmmm... 
      container.invalidate(); 
      if (visible) { 
       // TODO get OsK height somehow!!! 
       container.padBottom(310); 
      } else { 
       container.padBottom(0); 
      } 
     } 
    }; 
    textFld1.setOnscreenKeyboard(keyboard); 
    textFld2.setOnscreenKeyboard(keyboard); 

и на InputListener кнопки Submit (на приземление) У меня есть функция очистки, как:

textFld1.setText(""); 
    textFld2.setText(""); 
    stage.unfocus(textFld1); 
    stage.unfocus(textFld2); 
    keyboard.show(false); 

Таким образом, таблица контейнер будет заполняться, когда отображается мягкая клавиатура, и она будет восстановлена ​​после нажатия кнопки отправки; также скрыта мягкая клавиатура.

Теперь, есть две проблемы с этим обходным путем:

  • я не нашел способ, чтобы получить высоту мягкой клавиатуры; как вы можете видеть в примере кода, я выбрал произвольное значение для дополнения вверх, поэтому мелодии хорошо выглядят на моем эмуляторе

  • Если нажата жесткая кнопка, нажата кнопка «Назад» или «ESC» в эмуляторе, но верхнее заполнение таблицы все равно будет; Я не нашел как, чтобы определить, является ли экранная клавиатура видна или не

Если кто-то найдет другое решение моей проблемы, пожалуйста, напишите его.

Спасибо.

0

Я тоже полностью боролся с этой проблемой, но я думаю, что нашел действительно приятное решение.

Решение в теории:

когда клавиатура всплывает, он делает экран изменить размер, тем самым вызывая libgdx-х размер обратного вызова.

Преимущества:

  • нет необходимости иметь логику, имеющие не делать с обнаружением видимости клавиатуры
  • нет необходимости, чтобы получить высоту клавиатуры
  • обрабатывать everythin в изменения размера обратного вызова класса экрана в libgdx в
  • просто реализовать (я думаю)

Недостатки

  • приложение больше не может быть на весь экран; в строке состояния показывает и вещи

Как это сделать:

  1. Создать main_layout.xml файл (....YourLibGdxThing\android\res\layout\main_layout.xml) таким образом, что имеет следующий XML:

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
    
        <FrameLayout 
         android:id="@+id/main_frame_layout" 
         android:layout_width="match_parent" 
         android:layout_height="0dp" 
         android:layout_weight="1"/> 
    
    </LinearLayout> 
    
  2. изменить ваш класс андроида-пусковой установки (....YourLibGdxThing\android\src\your\name\space\android\AndroidLauncher.java), так что onCreate выглядит так:

    public class AndroidLauncher extends AndroidApplication 
    { 
        @Override 
        protected void onCreate (Bundle savedInstanceState) 
        { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.main_layout); 
         AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
         FrameLayout frameLayout = (FrameLayout) findViewById(R.id.main_frame_layout); 
         frameLayout.addView(initializeForView(new YourGame(),config)); 
        } 
    } 
    
  3. изменения android:windowFullScreen атрибут в style.xml (....YourLibGdxThing\android\res\values\styles.xml) ложь; XML-должен выглядеть в style.xml:

    <resources> 
    
        <style name="GdxTheme" parent="android:Theme"> 
         <item name="android:windowBackground">@android:color/transparent</item> 
         <item name="android:colorBackgroundCacheHint">@null</item> 
         <item name="android:windowAnimationStyle">@android:style/Animation</item> 
         <item name="android:windowNoTitle">true</item> 
         <item name="android:windowContentOverlay">@null</item> 
         <item name="android:windowFullscreen">false</item> <!-- IMPORTANT --> 
        </style> 
    
    </resources> 
    
  4. добавить атрибут android:windowSoftInputMode="adjustResize" к андроида манифеста, в теге действия ... мой AndroidManifest (....YourLibGdxThing\android\AndroidManifest.xml) выглядит следующим образом:

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          package="my.project.reverse.domain.thing" 
          android:versionCode="1" 
          android:versionName="1.0" > 
    
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="22" /> 
    
    <application 
        android:allowBackup="true" 
        android:icon="@drawable/ic_launcher" 
        android:label="@string/app_name" 
        android:theme="@style/GdxTheme" > 
        <activity 
         android:name="my.project.reverse.domain.thing.AndroidLauncher" 
         android:label="@string/app_name" 
         android:screenOrientation="portrait" 
         android:windowSoftInputMode="adjustResize"  <!-- IMPORTANT --> 
         android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> 
         <intent-filter> 
          <action android:name="android.intent.action.MAIN" /> 
          <category android:name="android.intent.category.LAUNCHER" /> 
         </intent-filter> 
        </activity> 
    </application> 
    
    </manifest> 
    

Спасибо! Я надеюсь, что это помогает!!!!!!!!!!