android - 当方向改变android时 Activity 重新启动?

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

<分区>

我有一个应用程序,我在其中使用横向和纵向模式。我在每次 Activity 中都使用了 android:configChanges="orientation|keyboardHidden"。因此,当我在设备 2.3 上运行它时,它完全可以正常工作并且 Activity 不会重新启动。但是,当我在 android 4.0 及更高版本中打开相同的应用程序时,只要更改方向, Activity 就会重新启动。 这是我的 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

Caution: Beginning with Android 3.2 (API level 13), the "screen size" also changes when the device switches between portrait and landscape orientation. Thus, if you want to prevent runtime restarts due to orientation change when developing for API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), you must include the "screenSize" value in addition to the "orientation" value. That is, you must decalare android:configChanges="orientation|screenSize". However, if your application targets API level 12 or lower, then your activity always handles this configuration change itself (this configuration change does not restart your activity, even when running on an Android 3.2 or higher device).

来自这里:Handling Orientation Change

关于android - 当方向改变android时 Activity 重新启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21043469/

相关文章:

java - 如何使用 BiometricManager 或 BiometricPrompt 检查生物识别硬件是否可用?

iphone - presentModalView 从我的横向应用程序的侧面进来

android - 如何更改 Android 中 fragment 的方向?

android - 屏幕旋转时调用 OnItemSelectedListener

android - 获取/删除 OnHierarchyChangeListener?

android - 解决 Logcat 警告消息

Android:在 onCreate 之前设置 Activity 方向,但不在 list 中(HDMI 插入问题)

android - 如何在支持自然景观设备的情况下检测左景观(正常)与右景观(反向)?

iphone - 如何实现 UIViewController 旋转以响应方向变化?

android - 指定的 child 已经有一个 parent