libGdx gameView 不显示在 ScrollView 中

libGdx gameView doesn't display in a ScrollView

我正在试验 ScrollView,以便能够在出现软键盘时向上滚动屏幕。 为此,我从一个非常简单的程序开始。在AndroidLauncher.java中,我创建了一个ScrollView和一个gameView。我将 gameView 添加到 ScrollView 并完成 "setContentView(scrollView)"

嗯...我没有错误,程序启动并显示在屏幕上,但程序不显示 gameView。我只看到 ScrollView 的背景颜色。

我在我的代码中放了 2 个 System.out.println("Test"),一个在 AndroidLauncher.java 的末尾,一个在 MyGdxGame.java。仅打印 AndroidLauncher.java 中的测试,这意味着未创建 gameView。有人有想法吗?

谢谢

这是代码:

AndroidLauncher.java :

public class AndroidLauncher extends AndroidApplication {
@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

    ScrollView scrollView = new ScrollView(this);
    ScrollView.LayoutParams fParams = new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT,
            ScrollView.LayoutParams.MATCH_PARENT);
    scrollView.setLayoutParams(fParams);
    scrollView.setBackgroundColor(0xffa3b8fe);

    View gameView = initializeForView(new MyGdxGame(), config);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
    params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
    gameView.setLayoutParams(params);

    scrollView.addView(gameView);
    setContentView(scrollView);

    System.out.println("Test 1");
}

MyGdxGame.java :

public class MyGdxGame extends Game {
SpriteBatch batch;
AssetManager assets;

@Override
public void create () {
    batch = new SpriteBatch();
    assets = new AssetManager();

    System.out.println("Test 2");

    this.setScreen(new LoadingScreen(this));
}

@Override
public void render () {
    super.render();
}

public void dispose () {
    batch.dispose();
}

AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.scroll.test.android"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/GdxTheme" >
    <activity
        android:name="com.scroll.test.android.AndroidLauncher"
        android:label="@string/app_name" 
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan"
        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>

最后,我找到了解决问题的(非常简单的)方法: 在创建我的 ScrollView 之后,在 AndroidLauncher.java 中,我只需要添加这个方法:

 scrollView.setFillViewport(true);

那行得通!我的 android 应用显示游戏视图。 但现在我面临另一个问题。我想放置此 ScrollView 是因为我希望当软键盘出现在 au 文本字段上时屏幕向上移动。 虽然我把这一行放在 AndroidManifest.xml

    android:windowSoftInputMode="adjustPan"

那是行不通的。屏幕不动,软键盘隐藏了我正在使用的textField

嗯...那是另外一回事,如果我找不到解决方案,那将是另一个问题。