Android onConfiguration更改未被调用

2022-09-01 01:41:13

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

AndroidManifest.xml

<activity android:name="SearchMenuActivity" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation"></activity>

搜索菜单活动.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

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


答案 1

这是我对~相同问题的小精灵:

注意:从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果要防止在针对 API 级别 13 或更高版本进行开发时由于方向更改而导致运行时重新启动(如 minSdkVersion 和 targetSdkVersion 属性所声明的那样),则除了“方向”值之外,还必须包含“screenSize”值。也就是说,您必须将 android:configChanges=“orientation|screenSize”。但是,如果您的应用程序以 API 级别 12 或更低版本为目标,则您的活动始终会自行处理此配置更改(此配置更改不会重新启动您的活动,即使在 Android 3.2 或更高版本的设备上运行也是如此)。

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

TL;DR: 将 “|screenSize” 添加到 android:configChanges=“orientation” for API 14+


答案 2

可以尝试的几件事:

android:configChanges="orientation|keyboardHidden|screenSize"而不是android:configChanges="orientation"

确保您没有在任何地方打电话。这将导致 onConfigurationChange() 不触发。setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

检查您是否未在清单中使用。android:screenOrientation

如果这些都不起作用,请通读有关处理运行时更改的Android文档,并确保正确执行所有操作。代码中可能有其他位置导致问题。http://developer.android.com/guide/topics/resources/runtime-changes.html

编辑:正如Derrik所指出的,我假设您正在使用加速度计来更改配置,以检测设备面临的方向。如果您希望在显示/隐藏键盘时更改配置,则清单中的更改也必须包括。keyboardHidden


推荐