我想在横向视图中为我的片段使用单独的布局,因此我为横向视图创建了一个单独的布局。但问题是当我按顺序调用屏幕onConfigurationChanged
,onDestroyView
onDestroy
时。它支持前一个片段。我可以在我的活动中使用android:configChanges="orientation|screenSize"
来阻止它。但在这种情况下,视图保持不变,它不使用我的单独布局,它只是拉伸填充屏幕。有没有什么方法可以在使用android:configChanges="orientation|screenSize"
时使用单独的布局?
答案 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
会将所有内容初始化为结果你在旋转屏幕时得到第一个片段。
要处理它,你可以做的是在重新创建活动时使用savedInstanceState
(Bundle
),
保存您已加载的当前片段并将其提及到savedInstanceState
(Bundle
),并在更改方向后重新创建活动后,阅读savedInstanceState
,您将知道要加载fragment
答案 2 :(得分:-1)
请从清单中删除andorid:configChanges
。它的目的是您自己处理配置更改。删除它,android将自动选择正确的布局文件。
希望这有帮助。