libGdx gameView不会显示在ScrollView中

时间:2015-01-20 05:43:35

标签: android view libgdx 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>

1 个答案:

答案 0 :(得分:1)

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

 scrollView.setFillViewport(true);

这很有效!我的Android应用程序显示gameView。 但现在我面临另一个问题。我想放置这个ScrollView,因为当软键盘出现在文本字段上时,我希望屏幕向上移动。 虽然我将此行放在AndroidManifest.xml中

    android:windowSoftInputMode="adjustPan"

不起作用。屏幕不移动,软键盘隐藏了我正在使用的textField。

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