세로 모드에서만 작동하는 앱이 있으며 모든 활동에 대해 매니페스트 파일에서 방향을 세로로 변경했습니다. 그러나 장치를 회전하면 활동이 다시 생성됩니다. 활동을 파괴하지 않는 방법?
세로 모드에서만 작동하는 앱이 있으며 모든 활동에 대해 매니페스트 파일에서 방향을 세로로 변경했습니다. 그러나 장치를 회전하면 활동이 다시 생성됩니다. 활동을 파괴하지 않는 방법?
답변:
대한 API 12 이하 : 추가
android:configChanges="orientation"
방향이 변경 될 때마다 화면 크기도 변경되므로 API 13 이상을 대상으로하는 경우 "screenSize"를 추가하십시오 . 그렇지 않으면 새 장치가 계속해서 활동을 파괴합니다. "screenSize"사용에 대한 자세한 내용은 아래 Egg의 답변을 참조하십시오.
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 이상 기기에서 실행되는 경우에도 활동을 다시 시작하지 않음). *
나는 이것을 조금 엉망으로 만든 다음 Manifest 파일 내에서 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);
}