Android配置已更改

时间:2011-12-05 09:08:48

标签: android configuration rotation

我很想知道当Android设备被轮换时(即配置发生变化时)会覆盖哪些方法?

onSaveInstanceState(...)onConfigurationChanged(...)onRestoreInstanceState(...) - 类似于此?

我也很有兴趣听听与更改配置相关的整个过程。感谢。

4 个答案:

答案 0 :(得分:5)

根据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清单中:

<activity 
   android:configChanges=["orientation"]
   . . .
</activity>

希望这会有所帮助......

答案 1 :(得分:4)

当您旋转设备时,您的活动将重新创建,所有变量将被重新初始化。因此,在这种情况下,如果您希望某些值在Rotation上保持相同,您也可以使用onSaveInstanceState()存储其状态,并且可以通过检查Bundle不为空来再次在onCreate()中恢复。

if(savedInstanceState != null){
            // get the restore value from the Bundle
        }

旋转设备时将调用onConfigurationChanged()的位置(请注意,只有在选择了要使用清单中的configChanges属性处理的配置时,才会调用此选项)。从参数中,您将获得新设备配置。

如果您不希望在旋转设备时重新创建活动,则必须将此行添加到AndroidManifest文件中的活动代码中。

android:ConfigChanges="keyboardHidden|orientation"

答案 2 :(得分:2)

来自android开发者......

在运行时配置更改期间保留对象:

  1. 重写onRetainNonConfigurationInstance()方法以返回您要保留的对象。
  2. 再次创建活动时,请致电getLastNonConfigurationInstance()以恢复您的对象。
  3. Android在onStop()和onDestroy()之间调用onRetainNonConfigurationInstance(),因为配置更改而关闭了Activity。在onRetainNonConfigurationInstance()的实现中,您可以返回所需的任何Object,以便在配置更改后有效地恢复您的状态。

    如果您的应用程序从Web加载大量数据,则这可能很有价值。如果用户更改了设备的方向并且活动重新启动,则应用程序必须重新获取数据,这可能很慢。您可以执行的操作是实现onRetainNonConfigurationInstance()以返回携带数据的对象,然后在使用getLastNonConfigurationInstance()重新启动活动时检索数据。

    请点击此处查看更多信息Retaining an Object During a Configuration Change您还可以找到他们的示例..

    谢谢..

答案 3 :(得分:1)

转到Manifest并添加机器人:configChanges = “取向|屏幕尺寸”

 <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);


    }

全部完成 -