티스토리 뷰




 < 개발 환경 >  
   작성일 : 2013.01.19
   OS 설치 버전 : Windows7 32bit  
   SDK 설치 버전 : 안드로이드 SDK 4.2 (젤리빈) / API LEVEL : 17  
   ADT 설치 버전 : 21   
   Java 설치 버전 : JDK 1.6.0_20 / JRE6 
   이클립스 설치 버전 : Indigo
   테스트단말 : 삼성 갤럭시 S2 4.0.4 (아이스크램 샌드위치)   

 < 프로젝트 적용 > 
   API LEVEL : 14  
   minSdkVersion : 14 
   targetSdkVersion : 14  
   Java Compiler Level : 1.6  
   Text file encoding : UTF-8






안드로이드/Android 아이스크림 샌드위치(4.0) 이상 버전 화면 전환시 Activity 재생성 방지 속성 ~!





안녕하세요. 기존에 아이스크림 샌드위치(4.0) 이하 버전에서 화면을 가로/세로 모드로 전환시 Activity 재성성을 방지하기 위해 AndroidManifest.xml의 해당 Activity에 "android:configChanges="orientation" 속성을 추가해 줘서 화면 전환시 Activitry 재생성을 방지 했는데요.


아이스크림 샌드위치(4.0) 버전이 등장 함으로써 기존에 "android:configChanges="orientation" 속성만으로 화면 전환시 Activity 재생성을 방지 할 수 없게 되었습니다.


아이스크림 샌드위치(4.0) 에서 화면전환시 Activity 재생성을 방지하기 위해서는 한가지 속성을 더 추가 해줘야 하는데요. 바로 요녀석을 추가해 주시면 됩니다.


android:configChanges="orientation|screenSize"    

<AndroidManifest.xml 에 해당 Activity에 설정>



1) 아이스크림 샌드위치(4.0) 이상 버전에서 Activity 속성을 추가하지 않은 경우


2) 아이스크림 샌드위치(4.0) 이상 버전에서 Activity 속성을 추가한 경우



주의사항!!! : 만약 폴더별로 land(가로), port(세로) xml을 다르게 적용 하였다면, configChanges 속성을 설정해 주어도 화면 전환시 곧바로 해당 폴더의 xml을 참조하지 않습니다. 만약 세로 모드에서 작업을 하고 있는데 가로 모드로 변경한다면 기존 세로모드에서 사용했던 xml이 그대로 화면에 보여지게 됩니다.


flow : 세로 모드 작업 -> 가로 모드 전환 -> 세로 모드 XML 계속 보여짐


하지만 해당 xml을 종료 한 후 xml을 다시 실행하게 되면 정상적으로 가로 모드의 xml이 보여지게 됩니다. 화면 전환시 곧바로 해당 모드의 xml을 참조하지 않는 문제점을 해결 하기 위해서는 onConfigurationChanged() 메서드에서 작업을 해주면 됩니다.


onConfigurationChanged() 메서드는 Activity 화면 전환시 호출되는 메서드 입니다. Acitivity layout 말고도 inflate 팝업이나 xml를 활용한 작업의 모드별 레이아웃 적용에 유용하게 사용할 수 있습니다.


@Override
public void onConfigurationChanged(Configuration newConfig) {
	super.onConfigurationChanged(newConfig);

	if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) // 세로 전환시
	{ 
		setContentView(R.id.port_activity);
	} 
	else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)// 가로 전환시
	{ 
		setContentView(R.id.land_activity);
	}
}




파일첨부 : 

TestActivityConfigChangesICS.zip




감사합니다.









댓글
댓글쓰기 폼