我有一个仅适用于纵向模式的应用程序,并且我已在清单文件中针对每项活动将其定向为纵向进行了更改。但是,当我旋转设备时,活动将重新创建。如何不破坏活动?
我有一个仅适用于纵向模式的应用程序,并且我已在清单文件中针对每项活动将其定向为纵向进行了更改。但是,当我旋转设备时,活动将重新创建。如何不破坏活动?
Answers:
对于API 12以下:添加
android:configChanges="orientation"
如果您的目标是API 13或更高版本,请添加“ screenSize” ,因为只要方向改变,屏幕尺寸也会随之改变,否则新设备将继续破坏您的活动。有关使用“ screenSize”的更多信息,请参见下面的Egg答案。
android:configChanges="orientation|screenSize"
您在AndroidManifest.xml中的活动。这样,您的活动将不会自动重新启动。请参阅文档以获取更多信息
氟林在官方文件中说:
注意:如果您的应用程序的目标是API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明),则还应该声明“ screenSize”配置,因为当设备在纵向和横向之间切换时,它也会更改。
因此,如果您的应用定位到API级别13或更高级别,则应改为设置以下配置:
android:configChanges="orientation|screenSize"
我把它弄乱了一点,然后想起了在清单文件中将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>
在浮动图像中查看此代码。它具有处理屏幕旋转最有趣的方式。http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation
写在清单中:
android:configChanges="orientation|screenSize|keyboardHidden"
并在解决您的问题的活动中覆盖此内容:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}