设备方向更改不会更改布局

时间:2012-02-03 21:13:29

标签: android

我在layout-normal-land和layout-normal-port文件夹中有替代布局,如果我在启动时将设备放在陆地或端口,系统会正确调用它们。我的问题是,当我启动应用程序后旋转设备时,它会尝试以某种方式使已经显示的视图适应新情况,造成混乱。 如何告诉系统它应该在执行期间切换到备用布局?

一直在试验并发现当我没有android:configChanges =“keyboardHidden | orientation”时,再次调用oncreate,这会给出正确的布局,但它不是我想要的。我不认为这是正常的,是吗?也许是Android中的错误问题(2.3.3。)?

5 个答案:

答案 0 :(得分:7)

包括

android:configChanges="orientation"

在你的清单中,你说你想自己处理方向改变。如果您希望系统为您处理它,则应将其删除。

自动处理效果非常好。如果您有特定原因,则应该只覆盖它。

在正常操作中(没有上述清单条目),方向开关会导致当前活动关闭,然后以新方向重新打开,从当前活动的资源文件夹重新加载所有资源和布局。该过程遵循所谓的“Activity Lifecycle”。

如果您包含上述清单条目,则表示“我将自行处理所有更改。请勿关闭我的活动”,因此您有责任从活动中删除所有不需要的布局并将其替换为您的布局现在要求当前的方向。

答案 1 :(得分:0)

您是否已使用OrientationListener? 如果不是:

http://developer.android.com/reference/android/view/OrientationEventListener.html#onOrientationChanged(int

侦听器应检测方向变化。 然后在Activity类中调用 setContentView(R.layout.name_of_layout)

希望这有帮助。

答案 2 :(得分:0)

您在该活动的清单中有android:configChanges="orientation"吗?这将阻止android自动更改您的布局。

答案 3 :(得分:0)

可能很明显,但是:

  1. 在res文件夹中,确保您有标有“layout”和“layout-land”的文件夹。
  2. 纵向和横向.xml文件必须具有相同的文件名。

答案 4 :(得分:0)

我遇到了同样的问题,清单中没有android:configChanges =“ orientation”。

但是,我的mainactivity中确实有[Activity(ConfigurationChanges = ConfigChanges.Orientation)]。这似乎是替代自动定位处理的另一种方法。