답변:
이를 수행하는 데 일반적으로 세 가지 방법이 있습니다.
답변 중 일부에서 제안했듯이 처음으로 활동이 생성되고에서 복원되는 사례를 구분할 수 있습니다 savedInstanceState. onSaveInstanceState의 매개 변수를 재정의 하고 확인하면됩니다 onCreate.
매니페스트에 android:screenOrientation="portrait"(또는 "landscape")를 추가하여 한 방향으로 활동을 잠글 수 <activity>있습니다.
태그 android:configChanges="orientation|screenSize"에서 지정하여 화면 변경을 직접 처리하겠다고 시스템에 알릴 수 <activity>있습니다. 이런 식으로 액티비티는 다시 생성되지 않지만 대신 콜백을 수신합니다 (유용하지 않으므로 무시할 수 있음).
개인적으로 나는 (3)과 함께 갈 것입니다. 물론 방향 중 하나에 앱을 잠그는 것이 괜찮다면 (2)와 함께 갈 수도 있습니다.
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"나를 위해 작동합니다. 감사합니다 @Pacerier
android:configChanges="orientation|screenSize"많은 사람들이 귀하의 답변을 주요 답변으로 여기기 때문에 답변 사례 # 3 을 API> = 13의 값으로 업데이트하십시오 !
Xion의 답변은 가깝지 만 android:configChanes="orientation"응용 프로그램의 API 수준이 12 이하가 아니면 # 3 ( )이 작동하지 않습니다.
API 레벨 13 이상에서는 방향이 변경 될 때 화면 크기가 변경되므로 방향이 변경 될 때 활동이 계속 파괴되고 시작됩니다.
아래처럼 "screenSize"속성을 추가하면됩니다.
<activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize">
</activity>
이제 방향을 변경하고 화면 크기가 변경되면 활동이 상태를 유지하고 onConfigurationChanged()호출됩니다. 방향이 변경 될 때 화면에있는 모든 것을 유지합니다 (예 : 웹뷰의 웹 페이지).
이 사이트에서 이것을 배웠습니다 : http://developer.android.com/guide/topics/manifest/activity-element.html
또한 이것은 명백히 나쁜 습관이므로 런타임 변경 처리에 대한 아래 링크를 읽으십시오.
http://developer.android.com/guide/topics/resources/runtime-changes.html
android:configChanges="orientation|screenSize"
당신은 단지 AndroidManifest.xml내부 및 내부 또는 활동 레이블 로 가야하며, 누군가가 말한 것처럼이 코드 줄을 입력해야합니다.
android:configChanges="orientation|screenSize"
따라서 다음과 같은 것이 있습니다.
<activity android:name="ActivityMenu"
android:configChanges="orientation|screenSize">
</activity>
그것이 효과가 있기를 바랍니다!
<activity android:name="com.example.abc"
android:configChanges="orientation|screenSize"></activity>
android:configChanges="orientation|screenSize"매니페스트 파일의 활동 탭에 추가 하십시오.
따라서 방향이 변경되면 활동이 다시 시작되지 않습니다.
onSaveInstanceState()하고 onCreate().
기본이 아닌 동작을 방해하지 않고 방향 변경을 올바르게 처리하는 것이 실제로 더 나은 것은 내 경험입니다.
현재 표시된 이미지를 저장하고 onSaveInstanceState()응용 프로그램이 onCreate()다시 실행될 때 올바르게 복원해야 합니다.
android:configChanges을 피하고 최후의 수단으로 만 사용해야합니다. 구성 변경으로 인한 재시작을 올바르게 처리하는 방법에 대한 자세한 내용은 런타임 변경 처리 를 참조하십시오."
이 솔루션은 지금까지 가장 잘 작동하는 솔루션입니다. 매니페스트 파일에 추가
<activity
android:configChanges="keyboardHidden|orientation|screenSize"
android:name="your activity name"
android:label="@string/app_name"
android:screenOrientation="landscape">
</activity
그리고 활동 수업에서 다음 코드를 추가하십시오.
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
//your code
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//your code
}
}
이걸 당신의 AndroidManifest.xml
<activity android:screenOrientation="landscape">
활동 태그가 있다는 것을 의미합니다. 이것을 다른 매개 변수로 추가하십시오. 세로 방향이 필요한 경우 가로를 세로로 변경하십시오. 도움이 되었기를 바랍니다.
manifyt 파일에서 각 활동에 이것을 추가하십시오. 도움이 될 것입니다
android:configChanges = "orientation|keyboard|keyboardHidden|screenLayout|screenSize"
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
@Override
protected void onSaveInstanceState(Bundle b)
{
super.onSaveInstanceState(b);
String str="Screen Change="+String.valueOf(screenChange)+"....";
Toast.makeText(ctx,str+"You are changing orientation...",Toast.LENGTH_SHORT).show();
screenChange=true;
}
귀하의 이미지 정보를 저장 onPause()또는 onStop()과에서 사용할 onCreate(Bundle savedInstanceState)이미지를 복원 할 수 있습니다.
편집하다:
실제 프로세스에 대한 자세한 정보는 http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle 에서 확인할 수 있습니다. 허니컴은 이전 Android 버전과 다릅니다.
그냥 사용하십시오 : android:configChanges="keyboardHidden|orientation"
최고의 솔루션인지는 모르겠지만 여기에 설명합니다.
우선, 당신은 클래스와 함께 인증서가 필요합니다. 앱의 응용 프로그램은 다음과 같이 나타납니다.
<application
android:name=".App"
...
둘째, 내 수업 앱에서 나는 이것을 좋아했다.
public class App extends Application {
public static boolean isOrientationChanged = false;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onConfigurationChanged(@NotNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ||
newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
isOrientationChanged = true;
}
}
}
셋째, 플래그를 방향 변경으로 설정해야합니다. 제 경우에는 앱 탐색 내의 이전 활동이 호출 될 때 항상 설정하므로 나중에 활동이 작성되면 한 번만 호출합니다.
isOrientationChanged = false;
따라서 해당 컨텍스트에서 화면의 방향을 변경할 때 마다이 설정을 변경할 때마다 방향을 변경하고 방향이 변경되는지 확인한 다음 해당 플래그의 값을 기준으로 유효성을 검사합니다.
기본적으로 비동기 개장 요청을 할 때마다 방향을 변경하는 모든 순간을 호출하여 지속적으로 응용 프로그램을 중단시키는 요청을 사용해야했습니다.
if (!isOrientationChanged) {
presenter.retrieveAddress(this, idClient, TYPE_ADDRESS);
}
그것이 가장 우아하고 아름다운 해결책인지는 모르겠지만 적어도 여기에서는 기능적입니다 :)
를 onCreate포함하는 활동에서, 메소드 뒤에이 코드를 추가하십시오 .WebView
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
}
Screen.lockOrientation(this)에서 전화 하십시오. 매니페스트가하지 않는 잠금을 해제 할 수 있습니다.