屏幕方向从横屏切换到竖屏无法正常工作

20

我已经为这个问题费尽心思数小时了。我创建了一个main.xml文件,并为横向模式在res/layout-land中设计了一个布局,而在res/layout中为纵向模式设计了另一个布局。

当我旋转模拟器(ctrl-F11)时,我的应用程序会使用正确的main.xml文件顺利地旋转到横向模式,但是随后旋转回纵向模式时,它仍然保留着横向模式的main.xml文件。

这是在2.0 AVD中完成的。

出于绝望,我下载了新的多分辨率示例代码,并不得不创建一个新的2.1 AVD,令我惊讶的是,使用此应用程序进行旋转时,一切都按预期正常工作。因此,我决定在2.1 AVD上尝试我的应用程序,结果完美运行。

那么,这是2.0 AVD中的一个Bug还是我需要为<2.1 SDK版本做些特殊的处理?

这让我疯狂,因为没有人提到过这个问题。

提前致谢。


我现在在2.3.3模拟器中看到了同样的问题...但1.6和2.1却可以正常工作...这让测试变得困难 :) - Jay
7个回答

9

就此而言,官方已经在这里报告了一个错误。


3
解决方法是在竖屏模式下按下主页按钮,这将重置重力传感器。 - StuTheDog

4

安装全新的Android开发环境,并创建一个新的2.3.3 AVD(arm和x86都可以)。即使是系统应用程序也存在同样的问题,所以这不是您代码中的错误,因为系统应用程序也存在相同的问题。

按下“主页”按钮并重新启动您的应用程序会将其恢复为纵向模式。


3
除非您指定
<activity android:name="MainActivity" android:configChanges="orientation">

在你的清单文件中,我认为你的应用程序应该自动选择正确的layout.xml。所以,对我来说,仿真器似乎有一个错误。无论如何,我发现仿真器在其他方面也存在故障。例如,当你将方向改回时,它会运行代码两次。

1
当您更改方向时,活动将被重新创建并调用其onCreate()方法,从而重新创建整个活动。因此这不是一个错误。 - YuDroid

1

我正在使用Java Helios的Eclipse和Android 2.2,我在我的笔记本电脑上遇到了同样的问题。我至少找出了我的问题所在。有时候我在没有WiFi的区域工作,所以我没有连接到互联网,这似乎会导致这个问题。我已经通过去一个WiFi热点进行测试,结果切换方向(横屏和竖屏)再次正常工作了。也许模拟器只需要连接才能做到这一点,或者这是模拟器中的一个错误。


0

我也曾遇到同样的问题,但我已经解决了。我认为这不是模拟器的问题,有些真机也会表现得像这样。主要原因是活动没有刷新。你可以这样做 - 覆盖

public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
    startActivity(getIntent());
    finish();

}

并重新加载当前活动。这会有所帮助。


0

是的,当涉及到方向变化时,模拟器有点有bug。我没有遇到过这个具体问题,但它有时会做一些奇怪的事情。然而,在物理手机上,这绝对不是<2.1 SDK的问题,因为我仍然被困在我的Hero上的v1.5上,并且通过选择正确的布局文件夹来获取xml文件,可以正确处理方向变化。


0

我只做过2.1开发,但我刚想到的另一个想法是尝试使用CTRL-F12(切换到下一个布局方向)而不是CTRL-F11(切换到上一个布局方向),看看是否有任何变化。这来自于控制模拟器

此外,还有许多生命周期方法可以重写以监视幕后发生的事情。这可能会让您知道模拟器中是否存在错误。


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