当方向改变安卓时,活动会重新启动



我有一个应用程序,我正在使用景观和波特雷特模式。我在每项活动中都使用了android:configChanges="orientation|keyboardHidden"。因此,当我在设备 2.3 上运行它时,它完全工作正常,并且活动不会重新启动。但是当我在android 4.0及更高版本中打开相同的应用程序时,每当方向更改时,活动都会重新启动。 这是我的 xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.iconnect.collaborator"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <supports-screens android:largeScreens="true"
        android:normalScreens="true" android:smallScreens="true"
        android:anyDensity="true" />
    <supports-screens android:smallScreens="true" />
    <supports-screens android:normalScreens="true" />
    <supports-screens android:largeScreens="true" />

   <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:icon="@drawable/cnlogomini"
        android:label="CollaborateNow"
        android:largeHeap="true"
      android:allowBackup="true"
        android:theme="@style/AppTheme" >
        <activity android:name="jim.h.common.android.zxinglib.CaptureActivity"
            android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden" />
        <activity android:name=".Register"
          android:configChanges="orientation|keyboardHidden" ></activity>
        <activity android:name=".ppllogincopy"
           android:configChanges="orientation|keyboardHidden"></activity>
<activity android:name=".Password"
           android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".Camerascan"
           android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".TabGroup1Activity"
            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".newtab"
            android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".SubmitData"
            android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".peoplelist"
         android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".GenerateQrcode"
        android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".contact"
           android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".peoplelistlogin"
          android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".Startnew"
             android:configChanges="orientation|keyboardHidden"
            ></activity>
          <activity android:name=".projectdetails"
           android:configChanges="orientation|keyboardHidden"></activity>
           <activity android:name=".Signup"
            android:configChanges="orientation|keyboardHidden"></activity>
          <activity android:name=".RegisterScan"
            android:configChanges="orientation|keyboardHidden"></activity>
          <activity android:name=".peoplelistscan"
           android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".Profile"
            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".List"
            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".Logout"
           android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".scanRegister"
            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".scanList"
            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name="scanCamera"
            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name="com.iconnect.collaborator.Camera"
         android:configChanges="orientation|keyboardHidden"></activity>
       <activity android:name=".collaborations"
           android:configChanges="orientation|keyboardHidden"></activity>

        <activity
            android:name="com.iconnect.collaborator.MainActivity"

            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

如果你的android:targetSdkVersion="12"或更少

android:configChanges="orientation|keyboardHidden"

如果您的android:targetSdkVersion="13"或更多

android:configChanges="orientation|keyboardHidden|screenSize"

引用自 developer.android

注意:从 Android 3.2(API 级别 13)开始,"屏幕尺寸"当设备在纵向和横向之间切换时也会发生变化取向。因此,如果要防止由于以下原因导致运行时重新启动针对 API 级别 13 或更高级别进行开发时方向更改(如由 minSdkVersion 和 targetSdkVersion 属性声明),你除了"方向"之外,还必须包含"屏幕大小"值价值。也就是说,您必须贴花android:configChanges="orientation|screenSize".但是,如果您的应用程序面向 API 级别 12 或更低,然后您的活动始终处理此配置更改本身(此配置更改)不会重新启动您的活动,即使在 Android 3.2 或更高的设备)。

从这里开始:处理方向更改

你也必须添加屏幕大小。

"当前可用的屏幕尺寸已更改。这表示当前可用大小相对于当前纵横比的变化,因此当用户在横向和纵向之间切换时会发生变化。但是,如果您的应用以 API 级别 12 或更低版本为目标,则您的活动始终会自行处理此配置更改(即使在 Android 3.2 或更高版本的设备上运行时,此配置更改也不会重新启动您的活动)。在 API 级别 13 中添加。

最新更新