【发布时间】:2012-01-13 01:21:48
【问题描述】:
我很想知道在旋转 Android 设备时(即配置更改时)哪些方法会被覆盖?
onSaveInstanceState(...), onConfigurationChanged(...), onRestoreInstanceState(...) - 类似的东西?
听听与更改配置相关的整个过程对我来说也很有趣。谢谢。
【问题讨论】:
标签: android configuration rotation
我很想知道在旋转 Android 设备时(即配置更改时)哪些方法会被覆盖?
onSaveInstanceState(...), onConfigurationChanged(...), onRestoreInstanceState(...) - 类似的东西?
听听与更改配置相关的整个过程对我来说也很有趣。谢谢。
【问题讨论】:
标签: android configuration rotation
根据你必须使用的android开发者参考:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
欲了解更多信息,请参阅:http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
您可能有兴趣查看:http://developer.android.com/guide/topics/manifest/activity-element.html#config
在这里你可以找到所有你可以监听的配置监听器。
记得把它们放在 android manifest 中:
<activity
android:configChanges=["orientation"]
. . .
</activity>
希望这会有所帮助...
【讨论】:
android:configChanges 更新清单的部分..我错过了,因为它靠近底部并且我的屏幕尺寸适中。没什么大不了的..但将它放在Java代码附近可能会有所帮助..我在该方法中设置了断点,但直到我意识到我需要清单更新时它们才被触发。任何方式..感谢您让我朝着正确的方向前进!
当您旋转设备时,您的 Activity 将重新创建,并且所有变量都将重新初始化。因此,在这种情况下,如果您希望某些值在 Rotation 上保持不变,您也可以使用 onSaveInstanceState() 存储它们的状态,并且您可以通过检查 Bundle is not null 再次在 onCreate() 中恢复。
if(savedInstanceState != null){
// get the restore value from the Bundle
}
当您旋转设备时,onConfigurationChanged() 将被调用(请注意,只有在您选择了您想在清单中使用 configChanges 属性处理的配置时才会调用它 )。从参数中您将获得新的设备配置。
如果您不希望在设备旋转时重新创建 Activity,则必须将此行添加到 AndroidManifest 文件中的 Activity 标记中。
android:ConfigChanges="keyboardHidden|orientation"
【讨论】:
来自安卓开发者...
在运行时配置更改期间保留对象:
onRetainNonConfigurationInstance() 方法以返回您想要保留的对象。getLastNonConfigurationInstance() 以恢复您的 Object。Android 由于配置更改而关闭您的 Activity 时,会在 onStop() 和 onDestroy() 之间调用 onRetainNonConfigurationInstance()。在 onRetainNonConfigurationInstance() 的实现中,您可以返回所需的任何对象,以便在配置更改后有效地恢复您的状态。
如果您的应用程序从 Web 加载大量数据,这可能会很有价值。如果用户更改了设备的方向并且 Activity 重新启动,您的应用程序必须重新获取数据,这可能会很慢。你可以做的是实现onRetainNonConfigurationInstance() 来返回一个携带你的数据的对象,然后当你的Activity 再次以getLastNonConfigurationInstance() 启动时检索数据。
查看此处了解更多信息Retaining an Object During a Configuration Change,您还可以在他们的网站上找到示例..
谢谢..
【讨论】:
转到 Manifest 并添加: android:configChanges="orientation|screenSize"
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"
android:configChanges="orientation|screenSize"
/>
在主活动中:复制并粘贴此代码:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
全部完成 -
【讨论】: