【问题标题】:android layout-land and onConfigurationChangedandroid layout-land 和 onConfigurationChanged
【发布时间】:2011-06-23 22:25:47
【问题描述】:

我是 Android 的初学者,并试图弄清楚如何将不同的布局文件 (main.xml) 用于纵向和横向屏幕。

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

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

那么谁能帮我解决这个问题?

谢谢,

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    转到您的 AndroidManifest.xml 并将此行添加到您的活动标签:

    android:configChanges="orientation"

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

    【讨论】:

    • 我认为状态应该保存在onSaveInstanceState()而不是onConfigurationChangedd()
    【解决方案2】:

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

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

    启动应用程序,旋转设备,您应该会看到背景颜色发生变化。这是因为 Activity 正在被销毁并使用新布局重新启动。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多