Android onConfigurationChanged没有被调用
我在告诉Android在方向更改时不要调用onCreate()
遇到问题。 我已经将android:configChanges="orientation"
到我的清单中,但仍然调用方向更改onCreate()
。 这是我的代码。
AndroidManifest.xml中
<activity android:name="SearchMenuActivity" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation"></activity>
SearchMenuActivity.java
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the current layout to the search_menu setContentView(R.layout.search_menu_activity); Log.d(TAG, "onCreate() Called"); } @Override public void onConfigurationChanged(Configuration newConfig) { //don't reload the current page when the orientation is changed Log.d(TAG, "onConfigurationChanged() Called"); super.onConfigurationChanged(newConfig); }
和我的LogCat输出
06-23 12:33:20.327: DEBUG/APP(2905): onCreate() Called //Orientation Changes 06-23 12:33:23.842: DEBUG/APP(2905): onCreate() Called
有谁知道我在做什么错? 谢谢。
几件事情要尝试:
android:configChanges="orientation|keyboardHidden|screenSize"
而不是android:configChanges="orientation"
确保你没有调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
任何地方。 这将导致onConfigurationChange()不会触发。
检查你的清单中没有使用android:screenOrientation
。
如果这些都不起作用,请仔细阅读Android文档,了解如何处理运行时更改,并确保正确地执行所有操作。 在你的代码中可能有其他的东西导致了这个问题。 http://developer.android.com/guide/topics/resources/runtime-changes.html
编辑:正如derrik指出的,我认为你正在改变configuration与加速度计检测设备面对的方式。 如果您希望在显示/隐藏键盘时更改configuration,清单中的configChanges也必须包含keyboardHidden
。
这是我同样的问题:
注意:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,“屏幕大小”也会改变。 因此,如果要在API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)开发时防止因方向更改而导致运行时重新启动,则除了“方向”值之外,还必须包含“screenSize”值。 也就是说,你必须decalare android:configChanges =“orientation | screenSize”。 但是,如果您的应用程序的目标级别为12或更低,那么您的活动始终会自行处理此configuration更改(即使在Android 3.2或更高版本的设备上运行,此configuration更改也不会重新启动您的活动)。
(来自http://developer.android.com/guide/topics/resources/runtime-changes.html )
TL; DR:为API 14+添加“| screenSize”到android:configChanges =“orientation”
尝试使用这一个…..
android:configChanges="orientation|keyboardHidden|screenSize"
您应该将AndroidManifest.xml中的configChanges条目更改为:
android:configChanges="keyboardHidden|orientation"
否则,即使方向改变,滑动键盘也不会触发onConfigurationChange()。 我只是testing了我的HTC Desire Z.
将其添加到您的清单,每个活动。
android:configChanges="keyboardHidden|orientation|screenSize"
然后,在你的活动上覆盖onConfigurationChanged
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); }
它没有在我的Fragment
触发( Fragments
未在AndroidManifest.xml
注册),所以我不得不将它移动到pipe理我的Fragment
的Activity
,在我的情况下是TabsPagerActivity
。
performance:
<activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize"> </activity>
活动与片段:
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(TAG, "onConfigurationChanged " + (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? "landscape" : "portrait")); }
输出:
10-29 21:53:26.951 D/FragmentOne: onConfigurationChanged landscape 10-29 21:53:26.951 D/MainActivity:onConfigurationChanged landscape