【问题标题】:Activity Restarts when Orientation changes android? [duplicate]当方向改变android时活动重新启动? [复制]
【发布时间】:2014-01-10 11:42:35
【问题描述】:

我有一个应用程序,我在其中使用横向和肖像模式。我在每次活动中都使用了 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>

【问题讨论】:

  • 您是否要阻止方向更改??
  • 回答了好几次。你应该保存你的状态并恢复它。
  • 不,我想要肖像和风景,但是随着 4.0 及更高版本的方向变化,活动会重新启动,但不会在 2.3 重新启动。

标签: android orientation screen-orientation android-orientation device-orientation


【解决方案1】:

如果您的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 属性声明),你 除了“方向”之外,还必须包含“screenSize”值 价值。也就是说,你必须 decalare android:configChanges="orientation|screenSize"。但是,如果您的 应用程序以 API 级别 12 或更低级别为目标,那么您的活动始终 自行处理此配置更改(此配置更改 不会重新启动您的活动,即使在 Android 3.2 或 更高的设备)。

在这里阅读更多:Handling Orientation Change

【讨论】:

    【解决方案2】:

    您也必须添加 screenSize。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多