当方向改变时,如何处理布局更改?

时间:2011-08-16 21:41:33

标签: android

我正在尝试简单地在我旋转设备时更改setlayout,以便我可以为适合Android设备当前方向的特定活动设置视图布局,但我对实现最佳实现方式感到困惑此

我已经提到了以下android doc:

Handling Runtime Changes

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

由于

3 个答案:

答案 0 :(得分:2)

要获取横向视图而不是纵向视图的不同视图,您可以将布局XML文件放在以下两个资源文件夹中:

/ res / layout - Portrait

/ res / layout-land - Landscape

当然,如果你在两者中都有相同的视图,否则你可能会得到一些NullPointerExceptions。

答案 1 :(得分:2)

您可以在res下创建一个名为“res \ layout-land”的新目录,在“res \ layout”和“res \ layout-land”中创建一个具有相同名称的.xml布局文件。例如:“myLayout.xml”。当处于landsacpe方向时,Android将自动使用-land目录中的布局,而当处于纵向时,Android将自动使用另一个布局。

答案 2 :(得分:1)

在您的项目res文件夹中,您应该有一个布局文件夹。在res中创建一个新文件夹并将其命名为layout-land。现在创建第二组layout.xml文件,这些文件特定于面向横向的设备。将它们保存在此layout-land文件夹中。系统将为您处理其余部分。

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

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

我测试的设备是Sidekick 4g。 Download the test project如果您愿意,请在设备上报告其工作原理。