[英]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
(电话) orientation
的更改将不会强制重新创建活动。 因此,即使您为片段设置了单独的布局,也不会加载该布局,
如果你做orientation
取决于方向变化的活动device
(手机),它会重新创建活动由于您activity
将初始化一切,因此你而旋转屏幕获得第一个片段。
为了解决这个问题,您可以做的是在重新创建活动时使用savedInstanceState
( Bundle
),
保存您已加载的当前片段,并将其提到到savedInstanceState
( Bundle
)中,并在更改方向后重新创建活动后,读取savedInstanceState
,您将知道要加载哪个fragment
请从清单中删除andorid:configChanges
。 其目的是让您自己来处理配置更改。 删除它,Android将自动选择正确的布局文件。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.