2011-08-16 111 views
0

我想简单地改变setlayout当我旋转我的设备,以便我可以有一个适合Android设备的当前方向的特定活动的视图布局,但我很困惑有关实现此目的的最佳方法。如何在方向更改时处理布局更改?

我已经提到了以下的Android DOC:

Handling Runtime Changes

我并不需要保存从我的活动的任何数据,所以不要认为我真的需要使用onRetainNonConfigurationInstance()方法。我尝试通过onConfigurationChanged()方法自己处理方向更改,在那里我找到当前的方向,然后根据需要设置布局,但这会导致视图不再有效。在onConfigurationchanged()中还需要做些什么吗?

感谢

回答

2

要获得景观有不同的看法,而不是肖像,你把你的布局XML文件在以下两个资源文件夹:

/RES /布局 - 肖像

/res/layout-land - Landscape

这当然,如果你在两个视图中都有相同的视图,否则你可能会得到一些NullPointerException异常。

1

在你的项目res文件夹中你应该有一个布局文件夹。在res中创建一个新文件夹并将其命名为layout-land。现在创建第二组专用于横向设备的layout.xml文件。将它们保存在这个layout-land文件夹中。系统将为您处理剩下的事情。

check out this page并向下滚动到“提供Alernative资源”,以获取有关可在res文件夹中使用的不同限定符的更多详细信息。

编辑:你使用什么设备?我创建了一个快速测试项目,它不过是hello world,但显示了res/layout-land文件夹中存储的布局中的不同文本。 我在清单中试过一次,并且一次没有configChanges="orientation"。当我运行应用程序并切换方向时,布局的行为与预期相同。当设备处于横向时,将显示来自布局域的布局,并且当设备处于纵向时,将显示来自普通布局文件夹的布局。

我测试的设备是Sidekick 4g。 Download the test project并且如果您喜欢,请回报它如何在您的设备上运行。

+0

谢谢你们,可惜它似乎并不奏效。在方向改变时,它只保留旧的布局。顺便说一句,没有新的观点被添加和非被删除,只是重新定位。我必须在清单中包含configChanges =“orientation”,因为我不希望我的活动重新启动,这就是为什么我没有看到期望的结果? – Kerry

+0

你在用什么设备,看我的编辑。 – FoamyGuy

+0

谢谢蒂姆。我尝试了它,因为你最初编码,它确实工作。不过,我意识到它可以工作,因为Android处理方向更改。在我自己的应用程序中,当方向更改时我重写Android,因为我不希望该Activity重新启动。感谢您的帮助。 – Kerry

2

您可以在名为“res \ layout-land”的资源下创建一个新目录,在同名的“res \ layout”和“res \ layout-land”中创建一个.xml布局文件。例如:“myLayout.xml”。 Android将自动使用landland目录中的布局,而另一个则是纵向布局。