安卓屏幕方向错误问题

3

我正在使用安卓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,这个游戏不是我写的。它也有同样的问题,有人知道如何修复吗?

编辑:它总是从竖屏开始。-->我的意思是,如果你从电源回来,你必须向下滚动才能做任何事情,就像有一个屏幕锁一样。

你可以看到屏幕顶部有一个“状态栏”,此时屏幕方向是"竖屏"。所以当你把"屏幕锁"向下滚动一点时,你会发现活动(如TEETER)处于"竖屏"状态。当你滚动到最底部时,活动的方向将突然改变为"横屏"状态。

所以结论是:我的活动被强制旋转了一次。我真的想知道如何修复它!


为什么在这里使用android:configChanges="orientation"?如果您的活动固定为一个方向,则不需要它。但对于您的问题,我不知道 - 您是否在其他设备上或模拟器上进行了测试,是否也出现了该问题? - Mathias Conradt
这是为了“不让我的活动被杀死并重新开始”。 - Steven Shih
3个回答

1
嗨,Steven Shih:
请查看开发人员指南的此页面。
http://developer.android.com/guide/topics/manifest/activity-element.html

尝试一下这行代码

 android:windowSoftInputMode="stateUnspecified|adjustPan" 

@Steven Shih:嗨,Steven Shih,你试过这个了吗?你还在遇到问题吗? - Sankar Ganesh PMP

1

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

  • 我在清单中强制将方向设置为横屏
  • 我的活动有两个SurfaceView(相机预览和叠加在其上的图层)
  • 按下电源按钮并返回后,我的视图突然出现了错误的方向

这似乎是与另一个问题相同:禁用方向但检测方向

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

这是我的解决方法:

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

看起来有点复杂,但这就是我在特定情况下必须经历的过程,因为我的视图是动态创建并直接附加到活动的默认FrameLayout上。也许我错过了一些默认行为,但这样我可以实现我所寻求的响应性。


0
不确定是否可以称之为修复,但这更像是一种解决方法。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    if (hasFocus)
        setContentView(mGameView);
    else
        setContentView(mEmptyView);
}

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

我已经在HTC Hero和Nexus S上进行了测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接