未调用Android onConfigurationChanged

cx6n0qe3  于 2023-03-16  发布在  Android
关注(0)|答案(8)|浏览(169)

我在告诉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

有人知道我哪里做错了吗?谢谢。

nzk0hqpo

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=“定向

blmhpbnm

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

piztneat

piztneat3#

试试这个.....

android:configChanges="orientation|keyboardHidden|screenSize"
vs91vp4v

vs91vp4v4#

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

android:configChanges="keyboardHidden|orientation"

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

7rtdyuoh

7rtdyuoh5#

将此添加到每个活动的清单中。

android:configChanges="keyboardHidden|orientation|screenSize"

然后,在您的Activity上覆盖onConfigurationChanged

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}
g52tjvyc

g52tjvyc6#

清单:

<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
h22fl7wq

h22fl7wq7#

它在我的Fragment中没有触发(Fragments没有在AndroidManifest.xml中注册),所以我不得不将它移动到管理我的FragmentActivity中,在我的情况下是TabsPagerActivity

esyap4oy

esyap4oy8#

有几件事可以反复核对:

  • 在我的案例中,我使用onConfigurationChanged跟踪设备的语言更改。*

关于onConfigurationChanged,需要了解的几件事是,活动和应用程序的onConfigurationChanged在行为上存在一些差异。

更改设备配置时,应用程序级别onConfigurationChanged将立即自动调用,但活动的onConfigurationChanged将在导航到该活动时调用。

另一件事是清单中的区域设置有时无法工作,因此您必须声明其他配置更改事件沿着区域设置(在我的情况下),应该类似于android:configChanges=“layoutDirection|区域设置”

相关问题