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
嗯...那是另外一回事,如果我找不到解决方案,那将是另一个问题。
我正在试验 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
嗯...那是另外一回事,如果我找不到解决方案,那将是另一个问题。