2014-01-30 53 views
2

我在我的LibGDX And​​roid應用程序表,下面的一些文本框(一行)和下方的按鈕,如何「推高」屏幕(提交)。 我的問題是,如何在表格,textfiels和按鈕上「滑動」,當文本框是焦點(點擊它)和軟鍵盤出現? 換句話說,如何讓軟鍵盤不是來覆蓋我的其他對象。 該解決方案可能這個問題有關: How can i find the height of soft-keyboard in a LibGDX application當顯示軟keybord

非常感謝。

+0

我從來沒有嘗試過,但嘗試從軟鍵高度設置'Gdx.gl.glViewport'到屏幕高度和正常寬度。我不確定,如果軟鍵使用相同的視口,但如果不是,這應該是你正在尋找的。 – Springrbua

+0

嗨,我試圖找出你指的是什麼,但我失敗了:)請給我一個提示嗎? – JedyKnite

+0

我希望這可以幫助你:http://www.acamara.es/blog/2012/02/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/。 「黑匣子」應該是你的Softkeyboard。 – Springrbua

回答

2

我找到了解決方法,解決了我的問題,它正在工作,但我不認爲太乾淨。 所以,我的情況是:

  • 的容器中,則包含一個ScrollPane(另一個表),這個滾動表下的兩個文本字段和下他們一個提交按鈕
  • 容器表設置,以填補父(全屏)
  • 文本字段和對準於容器表的底部

的問題是,當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(上觸地)我有一個像清理功能:

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

這樣的容器臺會在軟鍵盤顯示時填充,按下提交按鈕後將恢復;軟鍵盤也被隱藏起來。

現在,有兩個問題的解決方法:

  • 我還沒有找到一種方式來獲得軟鍵盤高度;正如你在示例代碼中看到的,我已經選擇了一個任意值作爲填充,所以在我的模擬器上看起來不錯。但桌子的上部填充仍然存在;我沒有找到如何確定軟鍵盤是可見或不可見

如果有人發現我的問題的另一個解決方案,請張貼。

謝謝。

0

我完全摔跤這個問題,但我想我找到了一個非常好的解決方案。

解決方案在理論上:

當鍵盤彈出,讓屏幕大小調整,從而調用libgdx的調整回調。

優點:

  • 沒有必要有具有鍵盤能見度檢測做
  • 沒有必要讓鍵盤的高度
  • 在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. 修改你的android啓動器類(....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"添加到Android清單,到活動標籤...我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> 
    

謝謝!我希望它可以幫助!!!!!!!!!!