我在我的LibGDX android应用程序中有一个表,下面是一些文本字段(一行)和一个下面的按钮(提交)。 我的问题是,当文本区域聚焦(点击它)并且软键盘出现时,如何“滑动”桌子,文本框和按钮? 换句话说,如何使软键盘不来覆盖我的其他对象。 此解决方案可能与此问题相关: How can i find the height of soft-keyboard in a LibGDX application
非常感谢。
答案 0 :(得分:2)
我找到了解决问题的方法,它正在运行,但我认为太干净了。 所以,我的情景是:
问题是,当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);
并在Submit按钮的InputListener上(在touchDown上)我有一个清理函数,如:
textFld1.setText("");
textFld2.setText("");
stage.unfocus(textFld1);
stage.unfocus(textFld2);
keyboard.show(false);
这样,当显示软键盘时,容器表将被填充,并且在按下提交按钮后将恢复容器表。软键盘也是隐藏的。
现在,此解决方法存在两个问题:
我还没有办法获得软键盘的高度;正如你在示例代码中看到的那样,我为up padding选择了一个任意值,所以在我的模拟器上看起来很好看
如果按下模拟器中的硬按钮Back或ESC,软键盘将隐藏,但表格的上翻仍然存在;我没有找到如何来确定软键盘是否可见
如果有人为我的问题找到了其他解决方案,请发布。
感谢。
答案 1 :(得分:0)
我也完全正在努力解决这个问题,但我认为我找到了一个非常好的解决方案。
理论上的解决方案:
当键盘弹出时,它会调整屏幕大小,从而调用libgdx的调整大小回调。
<强>优点:强>
<强>缺点强>
怎么做:
创建一个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>
修改你的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));
}
}
将android:windowFullScreen
(style.xml
)中的....YourLibGdxThing\android\res\values\styles.xml
属性更改为false; 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>
将属性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>
谢谢!我希望它有帮助!!!!!!!!!!
答案 2 :(得分:-1)
在android:windowSoftInputMode
块中将adjustPan
设置为<activity>
以获得所需的结果。请参阅文档:https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft