如何在 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 将自动选择正确的布局文件。
希望对您有所帮助。
我想在横向视图中为我的片段使用单独的布局,因此我为横向视图创建了一个单独的布局。但问题是当我旋转屏幕 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 将自动选择正确的布局文件。
希望对您有所帮助。