Android屏幕方向错误

时间:2010-10-29 08:24:32

标签: android orientation

我使用的是Android HTC HERO 2.1版本。

我写的活动:

<activity android:name=".gogogo"
          android:label="@string/app_name"
          android:theme="@style/Theme.mine"
          android:screenOrientation="landscape"
          android:configChanges="orientation">

让我的方向改变为风景。

然而,我发现每次按下“电源”按钮然后回到我的活动时,它总是以肖像开始。

我尝试了游戏:TEETER,这不是我写的。也有同样的问题,任何人都知道如何解决它?

修改:it always start at portrait. - &gt;我的意思是,如果你从权力回来,你必须向下滚动来做所有事情,有像屏幕锁定的东西。

您可以看到屏幕顶部有一个“状态栏”,此时方向为“portrait”。因此,在您稍微向下滚动“屏幕锁定”后,您可以看到活动(例如TEETER)处于“portrait”状态。当您完全向下滚动时,活动的方向将突然变为“landscape”状态。

所以结论是:我的活动被迫定位一次。我真的想知道如何解决它!

3 个答案:

答案 0 :(得分:1)

Hai Steven Shih: 请阅读开发者指南的这一页。

http://developer.android.com/guide/topics/manifest/activity-element.html

并尝试此行

 android:windowSoftInputMode="stateUnspecified|adjustPan" 

答案 1 :(得分:1)

不确定是否是同样的问题,但这是我遇到的问题:

  • 我强制将方向作为清单中的风景
  • 我的活动有两个表面视图(相机预览和顶部的图层)
  • 按下电源按钮然后回来后,我的观点突然出现了错误的方向

这似乎与另一个问题是同一个问题:Disable orientation but detect orientation

我认为问题在于,一旦按下电源按钮,锁定屏幕会将方向强制为纵向。在onConfigurationChanged中,当我按下电源按钮时,我得到一个方向更改,这是意外的,因为我告诉明确锁定方向。事实是,当前面的另一个活动迫使方向时,其他活动会被告知方向改变,即使他们要求明确的方向。

这是我的解决方法:

  • 在onPause中,使用removeView分离视图(我的应用程序以编程方式创建了视图,而不是xml布局)
  • 在onResume中,首先检查方向是否是您请求的方向(getResources()。getConfiguration()。orientation)。如果是这种情况,请重新附加视图(addContentView或其他)。
  • 如果方向不是您期望的方向,请调用setRequestedOrientation
  • onConfigurationChanged将被调用以告知方向已更改为您请求的方向。此时,您可以使用setContentView重新附加视图。

似乎有点复杂,但这是我在特定情况下必须经历的事情,因为我的视图是动态创建的并且直接附加到活动的默认FrameLayout。也许我因此而错过了一些默认行为,但这样我就可以达到我想要的反应性。

答案 2 :(得分:0)

不确定这是否可以称为修复,但这是一种解决方法。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    if (hasFocus)
        setContentView(mGameView);
    else
        setContentView(mEmptyView);
}

其中mGameView是您的普通内容,而mEmptyView只是一个简单的View对象。对于一两帧,活动仍将以纵向绘制,但用户无法看到。

我用HTC Hero和Nexus S进行了测试。