android layout-land和onConfigurationChanged

时间:2011-06-23 22:25:48

标签: android android-layout

我是Android上的首发,并试图弄清楚如何使用不同的布局文件(main.xml)进行纵向和横向屏幕。

我尝试将main.xml放在res / layout和res / layout-land中,然后重建项目。但是,这对我不起作用。

然后我在代码中添加了onConfigurationChanged方法,并将setContextView添加到R.layout.main。这次我在不同的方向上获得了不同的屏幕布局,但所有功能都丢失了。有些帖子还说使用onConfigurationChanged方法并不是最好的主意。

那么有人可以帮我解决这个问题吗?

谢谢,

3 个答案:

答案 0 :(得分:2)

转到AndroidManifest.xml并将此行添加到您的活动代码中:

android:configChanges="orientation"

这告诉Android您希望在方向更改时控制活动的状态。通常,当有方向更改时,Android实际上会破坏您的活动并再次通过onCreate()重新创建它,因此除非状态保存在onConfigurationChanged()方法中,否则获取的任何数据都将丢失。 / p>

答案 1 :(得分:1)

Android会自动使用代表您设备当前状态的布局。对于您的特定项目,应在设备旋转时使用layout-land xml文件。当你覆盖onConfigurationChanged方法并修改你的清单时,它告诉Android你将自己处理配置更改,我不推荐,特别是如果你想要加载一个新的布局。

这是您需要做的(测试不同的布局)。在layouts文件夹中放入一个名为main的xml文件。对于布局,只需使用以蓝色背景填充父级的LinearLayout。现在创建一个名为main的xml布局文件,但将其放在layout-land文件夹下。在此布局中,使用红色背景。

启动应用程序,旋转设备,您应该看到背景更改颜色。这是因为活动正在被新布局破坏并重新启动。

答案 2 :(得分:0)

尝试使用onRetainNonConfigurationInstance()和getLastNonConfigurationInstance()方法来解决您的问题。 你也可以使用jrobinson3k1给出的上述sloution。 感谢名单。