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

How can I use different layout in android orientation change

我想在横向视图中为我的片段使用单独的布局,因此我为横向视图创建了一个单独的布局。但问题是当我旋转屏幕 onConfigurationChanged 时, onDestroyView onDestroy 顺序调用。它回到上一个片段。我可以通过在我的 activity 上使用 android:configChanges="orientation|screenSize" 来阻止它。但在这种情况下,视图保持不变,它没有使用我的单独布局,它只是被拉伸以填满屏幕。有什么办法可以让我在使用 android:configChanges="orientation|screenSize" 时使用单独的布局?

要使用不同的布局,请使用不同的资源文件夹: 也就是说,使用 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;
                    }

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

你的问题很笼统,

如果禁用 orientation 并将其设为 portrait/landscape 的常量,则 device (phone) 的 orientation 中的更改将不会强制 activity 为 re-created。所以即使你有单独的片段布局,它也不会被加载,

并且如果根据方向更改为 device (Phone) 将 orientation 变为 activity,它将 re-create activity 因此你 activity 将初始化所有内容,结果你在旋转屏幕时获得第一个片段。

要处理它,您可以做的是在重新创建 activity、

时使用 savedInstanceState(Bundle)

保存您已加载的当前片段,并在 savedInstanceState(Bundle) 中提及它,在 re-creating 和 activity 之后,当方向改变时,阅读savedInstanceState 你会知道要加载哪个 fragment

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

希望对您有所帮助。