如何在android方向更改中使用不同的布局

时间:2016-01-13 06:10:29

标签: android android-layout android-fragments screen-orientation

我想在横向视图中为我的片段使用单独的布局,因此我为横向视图创建了一个单独的布局。但问题是当我按顺序调用屏幕onConfigurationChangedonDestroyView onDestroy时。它支持前一个片段。我可以在我的活动中使用android:configChanges="orientation|screenSize"来阻止它。但在这种情况下,视图保持不变,它不使用我的单独布局,它只是拉伸填充屏幕。有没有什么方法可以在使用android:configChanges="orientation|screenSize"时使用单独的布局?

3 个答案:

答案 0 :(得分:3)

要使用不同的布局,请使用不同的资源文件夹: 也就是说,使用layout文件夹作为纵向,使用layout-lang作为横向模式。

您可以使用getResources().getConfiguration().orientation来检测方向,然后加载您喜欢的XML:

@Override
    protected void onCreate(Bundle savedInstanceState) {
switch (getResources().getConfiguration().orientation) {
                      case Configuration.ORIENTATION_PORTRAIT:
setContentView(R.layout.aportrait);
                         break;
                      case Configuration.ORIENTATION_LANDSCAPE:
setContentView(R.layout.alandscape);
                         break;
                    }

/////..............
}

答案 1 :(得分:1)

你的问题很通用,

如果您停用orientation并将其设置为portrait/landscape的常量,则orientation(电话)的device中的更改不会强制重置活动-created。所以,即使你有片段的单独布局,它也不会被加载,

如果您根据对orientation(电话)的方向更改进行device活动,则会重新创建活动,因此您activity会将所有内容初始化为结果你在旋转屏幕时得到第一个片段。

要处理它,你可以做的是在重新创建活动时使用savedInstanceStateBundle),

保存您已加载的当前片段并将其提及到savedInstanceStateBundle),并在更改方向后重新创建活动后,阅读savedInstanceState,您将知道要加载fragment

答案 2 :(得分:-1)

请从清单中删除andorid:configChanges。它的目的是您自己处理配置更改。删除它,android将自动选择正确的布局文件。

希望这有帮助。