안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요, 아직 동작하는 감이 안와서 매일밤 삽질중입니다. ^^;
가로 세로 레이아웃을 별도로 만들어서 layout-port 와 layout-land 에 동일한 xml 파일명과 ID 로 생성해 놨습니다.
그리고 android:configChanges="keyboardHidden|orientation" 는 빼버렸으니 화면 전환에 대해서 자동으로 onCreate 가
실행되어 다시 생성되는 상태이구요. 문제는 화면 전환 잠금을 구현하는데 버튼을 두어서 눌렀을때는 화면 전환을 고정시켜야 하는데
고정 버튼을 눌러 락을 걸때 (버튼 클릭 리스너)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
고정 버튼을 눌러 락을 풀때
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
위와 같이 처리를 했는데 이게 맞는 방식인지 궁금하네요. 세로모드인 경우는 정상적으로 락이 걸리면 화면전환에 반응을 안해서
정상적으로 동작하는데 가로모드에서 락을 걸 경우는 onCreate 를 타버리면서 화면이 반대로 적용(가로 90도에서 270도로 뒤집힘)이
되어 버리네요. 세로모드에서는 onCreate 를 다시 타지는 않습니다. (왜 가로모드인 경우만 onCreate 를 타는지 이상하네요...)
여기서 궁금한건 수동으로 SCREEN_ORIENTATION_LANDSCAPE 를 적용할 때 90 도 가로로 설정하거나 270도 가로로 설정하는 방법이 있는가요?
(2번째 질문)
이문제가 해결이 안되서 android:configChanges="keyboardHidden|orientation" 를 추가한 다음 화면 전환에 대해 레이아웃을
수동으로 변환해 보려고 합니다.
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
switch(newConfig.orientation) {
case Configuration.ORIENTATION_PORTRAIT:
//--- 세로 화면 생성
break;
case Configuration.ORIENTATION_LANDSCAPE:
//--- 가로 화면 생성
break;
}
}
여기서 가로/세로 레이아웃은 layout-port 와 layout-land 가 폴더로 분리되어 있구요
세로모드에서 가로로 전환되었다면 기존에 onCreate 에서 뷰생성하는 것처럼 모든 뷰생성 및 할당 코드가
onConfigurationChanged() 이 메서드에 다 들어가는 건가요? 그럼 화면 전환때 마다 생성 및 할당이 되는건지...
이부분이 이해가 안되네요..
새벽이라 정신이 좀 없네요.. ^^; 조언좀 부탁드립니다.