我有一个只能在竖屏模式下运行的应用程序,并且我已经在清单文件中为每个活动更改了方向,使其始终保持竖屏。但是当我旋转设备时,活动会重新创建。 如何避免销毁活动?
我有一个只能在竖屏模式下运行的应用程序,并且我已经在清单文件中为每个活动更改了方向,使其始终保持竖屏。但是当我旋转设备时,活动会重新创建。 如何避免销毁活动?
对于API 12及以下:添加
android:configChanges="orientation"
android:configChanges="orientation|screenSize"
将其添加到AndroidManifest.xml中的活动。 这样您的活动就不会自动重新启动。有关更多信息,请参见文档
根据官方文档flurin所说,
注意:如果您的应用程序的目标API级别为13或更高(由minSdkVersion和targetSdkVersion属性声明),则您还应声明"screenSize"配置,因为在设备在纵向和横向方向之间切换时,它也会发生变化。
因此,如果您的应用程序目标API级别为13或更高,则应设置此配置:
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"
Android文档:
当前可用的屏幕尺寸已更改。这表示相对于当前宽高比,当前可用尺寸发生了变化,因此当用户在横向和纵向之间切换时会发生变化。但是,如果您的应用程序针对API级别12或更低版本,则您的活动始终自己处理此配置更改(即使在运行Android 3.2或更高版本设备时,此配置更改也不会重新启动您的活动)。
我曾经搞砸了一段时间,后来发现在清单文件中,我将configChanges放在了应用程序级别而不是活动级别。以下是代码,在正确工作时的样子。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
现在 Android 支持分屏显示(在 Android 中称为“多窗口”),您可能希望添加 screenSize|smallestScreenSize|screenLayout|orientation。因此,为了处理旋转和分屏,您需要在 android:configChanges 中使用类似以下内容的代码。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
android:configChanges="orientation|screenSize|keyboardHidden"
并在解决问题的活动中覆盖此内容:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- stealthcopter