2013-01-21 79 views
0

我有一个应用程序,我重写onConfigurationChanged,因为我不希望活动被销毁和重建。它工作正常。android以编程方式重新加载布局资源

现在我希望布局的某个部分在方向更改时进行更改。经常我会这样做layout-land文件夹,这将工作,但现在不。即使当我改变为风景时,纵向布局也会保留,但显然会重新绘制,因为其中的项目会根据新的方向限制更改其位置。

我认为这是因为布局只是重绘,但资源不是从res文件夹中重新选择。

有什么想法? (我不想使用setLayoutResource或类似的东西,我宁愿使用更通用的解决方案)。

谢谢。

+0

在onConfigurationChanged()中发布代码。这样人们将会如何加载新的布局,并且会更容易地帮助您。 – Raj

+0

感谢您的帮助。我没有做任何与布局有关的事情。但我打电话super.onConfigurationChanged(newConfig);那里。 – Rotem

回答

0

没有onConfigurationChanged android自己重绘场景(根据方向它是setLayouResource)。

当你写onConfigurationChanged你说你的操作系统,你将手处理所有的东西,并与onConfigurationChanged android只旋转相应的视图。如果要使用layout-land中的布局,唯一的方法是调用setLayouResource(或动态移动视图(更改其布局参数) - 但这种方式不太好),并恢复所有数据。

+0

谢谢。我打电话超级,但它仍然没有重新加载布局。再次调用setLayoutResource会很麻烦,因为我正在讨论应用程序中的某个部分,它实际上是另一个Android项目的一个部件,我只想重新加载它。我无法重新加载所有内容,因为我有一个videoview,我希望它能继续播放。我喜欢Android简单地旋转VideoView而不停止任何事情的方式。 – Rotem

+0

你可以删除你的onconfigchanges,旋转你的设备onCreate后会被调用,并且在这个onCreate你可以使用保存的bundle恢复状态。没有办法(我不知道它,我认为这是非常不真实的)重新加载你的布局ith新的没有恢复你的状态。我认为你甚至可以保存视频的状态来恢复位置并从中播放。 – dilix

0

在AndroidManifest中,在活动中插入参数:android:configChanges =“orientation”。

0
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.yourlayout); 
} 

,并提供yourlayout.xml的两个版本:layout/yourlayout.xmllayout-land/yourlayout.xml。您可以添加更多 - 针对不同的尺寸等。

不要忘记设置android:configChanges="orientation|screenSize",否则您的活动可能会重新加载。

+0

它比这更复杂,因为我有一个VideoView,我希望在方向更改之后继续播放,并更改布局的其他部分。最后,我不得不重新创建每个方向更改的布局的其他部分。不管怎么说,还是要谢谢你 – Rotem