onConfigurationChanged问题

时间:2012-09-01 09:40:21

标签: android android-orientation

我需要在更改方向时更改Android(4.1 API 16)应用程序的布局。

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.main_2);
      System.out.println("Orientation changed!");
    }

此外,我已将下一行添加到清单文件

android:configChanges="orientation"

我使用Ctrl + F11来改变方向。我的屏幕旋转但布局保持不变,并且LogCat中没有打印任何内容。感觉像onConfigChanged事件不会发生。

我的错误在哪里?

谢谢。

3 个答案:

答案 0 :(得分:4)

尝试使用 android:configChanges="orientation|keyboardHidden|screenSize"

  

警告:从Android 3.2(API级别13)开始,“屏幕大小”   当设备在纵向和横向之间切换时也会发生变化   取向。因此,如果您希望阻止运行时重新启动   开发API级别13或更高级别时的方向更改(如   由minSdkVersion和targetSdkVersion属性声明),你   除“方向”外,还必须包含“screenSize”值   值。也就是说,你必须decalare   的机器人:configChanges = “取向|屏幕尺寸”即可。但是,如果你的   应用程序目标API级别12或更低,然后您的活动始终   处理此配置更改本身(此配置更改   即使在Android 3.2或Android上运行,也不会重新启动您的活动   更高的设备)。

来源:Documentation

因此,如果您的应用程序定位 API 13及更高版本,也请添加 "|screenSize" to configChanges

答案 1 :(得分:1)

假设您的纵向布局文件位于layout / my_layout.xml

将要在横向模式下使用的布局放置在layout-land文件夹中,并使用相同的布局文件名。即 layout-land / my_layout.xml

不要将 android:configChanges =“orientation”添加到该活动的清单中。

您无需显式更改布局。你需要覆盖onConfigurationChanged(配置newConfig)函数

答案 2 :(得分:0)

尝试这个......

android:configChanges="orientation|keyboardHidden|screenSize"