我在告诉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
有人知道我哪里做错了吗?谢谢。
8条答案
按热度按时间nzk0hqpo1#
这是我的gremlin ~同样的问题:
注意事项:从Android 3.2开始(API级别13),当设备在纵向和横向之间切换时,“屏幕大小”也会更改。因此,如果您希望在为API级别13或更高级别开发时防止由于方向更改而导致运行时重新启动(如minSdkVersion和targetSdkVersion属性所声明),除了“orientation”值之外,您还必须包含“screenSize”值。即,您必须标记android:configChanges=“orientation|但是,如果您的应用面向API级别12或更低级别,则您的Activity始终自行处理此配置更改(此配置更改不会重启您的Activity,即使在Android 3.2或更高版本的设备上运行)。
(From http://developer.android.com/guide/topics/resources/runtime-changes.html)
TL;DR:添加“|屏幕大小”更改为安卓系统:API 14+的configChanges=“定向
blmhpbnm2#
有几件事可以尝试:
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所指出的,我假设你是在用加速计检测设备朝向的方向来改变配置,如果你想在键盘显示/隐藏时改变配置,清单中的configChanges也必须包括
keyboardHidden
。piztneat3#
试试这个.....
vs91vp4v4#
您应该将AndroidManifest.xml中的configChanges条目更改为:
否则,即使方向改变,滑动键盘也不会触发onConfigurationChange()。我刚刚在我的HTC Desire Z上测试了这个。
7rtdyuoh5#
将此添加到每个活动的清单中。
然后,在您的Activity上覆盖
onConfigurationChanged
g52tjvyc6#
清单:
活动和片段:
输出:
h22fl7wq7#
它在我的
Fragment
中没有触发(Fragments
没有在AndroidManifest.xml
中注册),所以我不得不将它移动到管理我的Fragment
的Activity
中,在我的情况下是TabsPagerActivity
。esyap4oy8#
有几件事可以反复核对:
关于onConfigurationChanged,需要了解的几件事是,活动和应用程序的onConfigurationChanged在行为上存在一些差异。
更改设备配置时,应用程序级别onConfigurationChanged将立即自动调用,但活动的onConfigurationChanged将在导航到该活动时调用。
另一件事是清单中的区域设置有时无法工作,因此您必须声明其他配置更改事件沿着区域设置(在我的情况下),应该类似于android:configChanges=“layoutDirection|区域设置”