没有调用Android onConfigurationChanged

Ste*_*aly 40 java configuration android orientation

告诉Android onCreate()在方向改变时不打电话我遇到了麻烦.我已经添加android:configChanges="orientation"到我的清单中但仍然onCreate()调用了方向更改.这是我的代码.

AndroidManifest.xml中

<activity android:name="SearchMenuActivity" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation"></activity>
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

和我的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
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?谢谢.

nmr*_*nmr 80

对于同样的问题,这是我的问题:

注意:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,"屏幕大小"也会更改.因此,如果要在开发API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)时由于方向更改而阻止运行时重新启动,则除了"orientation"值之外,还必须包含"screenSize"值.也就是说,你必须decalare android:configChanges ="orientation | screenSize".但是,如果您的应用程序的目标是API级别12或更低,那么您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动).

(来自http://developer.android.com/guide/topics/resources/runtime-changes.html)

TL; DR:为API 14+添加"| screenSize"到android:configChanges ="orientation"

  • 真棒......在将targetSdkVersion从8改为14后,我想知道为什么没有调用onConfigurationChanged(). (2认同)

sha*_*net 56

有几件事要尝试:

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.

  • 对我来说,诀窍是使用android:configChanges ="orientation | keyboardHidden | screenSize" (7认同)

son*_*ida 10

试试这个......

android:configChanges="orientation|keyboardHidden|screenSize"
Run Code Online (Sandbox Code Playgroud)


der*_*rik 5

您应该将AndroidManifest.xml中的configChanges条目更改为:

android:configChanges="keyboardHidden|orientation"
Run Code Online (Sandbox Code Playgroud)

否则,即使方向发生变化,滑动键盘也不会触发onConfigurationChange().我刚在HTC Desire Z上测试了这个.