如何在方向更改时刷新Android RelativeLayout而不重新启动活动?

时间:2010-06-07 04:19:19

标签: android

我有一个带有RelativeLayout的Android Activity,我已经实现了以下方法来防止在更改Orientation时重新创建活动:

@Override
public void onConfigurationChanged(Configuration newConfig) {       
    super.onConfigurationChanged(newConfig);

}

我显然没有在这个方法中做任何事情,但是在使用LinearLayout时它工作得很好。然而,现在,使用RelativeLayout,我的布局在更改为横向时都会搞砸。

在没有通过调用onCreate重新启动活动的情况下,正确重绘屏幕的最有效方法是什么?

2 个答案:

答案 0 :(得分:2)

您有两种方式:

  • 配置更改期间保留对象
  • 处理配置改变自己

你选择了第二种方式。在这种情况下,您必须手动重新分配每个资源,不建议采用这种方法。

恕我直言,最好的方法是首先实现该方法:onRetainNonConfigurationInstance();

Here关于如何使用的完整示例。

注意:将再次调用onCreate,但您可以调整代码以防止在配置更改期间再次调用长期运行任务

答案 1 :(得分:2)

Francescos的答案中缺少第三种更简单的方法。

添加

android:configChanges="keyboardHidden|orientation"

到从横向模式更改为纵向模式时不想重新启动的每个活动的活动标记。这将导致操作系统重建您的布局,而不会在重建之前销毁它。不会再次调用oncreate方法,也不会松动活动状态。但要小心,只有在纵向和横向模式下使用相同的布局文件时才能使用。

有关此主题的更多信息,请参阅此question