【发布时间】:2013-06-26 17:46:47
【问题描述】:
我有一个简单的 hello world Android 测试项目。在我的 AndroidManifest.xml 中,我已经设置了
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|keyboard|orientation">
但是当我调试我的代码时,变量 isLandscape 是 True 而它应该是 False
boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
我知道我也可以通过代码设置活动方向,但是由于某些原因我需要在xml中设置。我该怎么做?
编辑:我的 AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidgames.mreater"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="preferExternal">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:icon="@drawable/ic_launcher"
android:allowBackup="true"
android:label="Mr. Eater" >
<activity
android:name="com.androidgames.mreater.MrEaterGame"
android:label="Mr. Eater"
android:screenOrientation="portrait"
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>
我实际的 onCreate 活动方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
int frameBufferWidth = isLandscape ? 480 : 320;
int frameBufferHeight = isLandscape ? 320 : 480;
Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,
frameBufferHeight, Config.RGB_565);
float scaleX = (float) frameBufferWidth
/ getWindowManager().getDefaultDisplay().getWidth();
float scaleY = (float) frameBufferHeight
/ getWindowManager().getDefaultDisplay().getHeight();
renderView = new AndroidFastRenderView(this, frameBuffer);
graphics = new AndroidGraphics(getAssets(), frameBuffer);
fileIO = new AndroidFileIO(getAssets());
audio = new AndroidAudio(this);
input = new AndroidInput(this, renderView, scaleX, scaleY);
screen = this.getStartScreen();
setContentView(renderView);
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");
}
现在变得更奇怪了,isLandscape 变量是 True,但有时它是 False。这有点像一个错误。
【问题讨论】:
-
屏幕方向是否真的改变了,或者只是变量返回了 true?
-
你是在活动标签上设置的吧?不把它放在应用程序标签中? developer.android.com/guide/topics/manifest/…
-
活动屏幕是横向的,而不是我想要的纵向。
-
@KenWolf 是的。我将它设置在活动标签中。
-
@CuồnYế 很奇怪。我真的只是尝试过这个并且无法复制这个问题。所有设备/模拟器都有这个问题?
标签: android xml android-activity orientation landscape-portrait