繁体   English   中英

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

[英]How can I use different layout in android orientation change

我想为景观视图中的片段使用单独的布局,因此我为景观视图创建了单独的布局。 但是问题是当我旋转屏幕onConfigurationChangedonDestroyView 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 (电话) orientation的更改将不会强制重新创建活动。 因此,即使您为片段设置了单独的布局,也不会加载该布局,

如果你做orientation取决于方向变化的活动device (手机),它会重新创建活动由于您activity将初始化一切,因此你而旋转屏幕获得第一个片段。

为了解决这个问题,您可以做的是在重新创建活动时使用savedInstanceStateBundle ),

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

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM