최근 회사에서 Tablet 해상도에 가로모드를 지원을 위해서 개발을 진행했었습니다.
가로/세로 모드를 적용하다보면 여러가지 기초 지식들이 햇갈릴 때가 많은데요.
그래서, 저도 다시 공부하고 여러분께도 도움이 되고자 화면전환과 구성변경 관련되서 연재 포스팅 합니다.
아마 이번 포스팅 포함해서 2~3번 정도면 모두 정리 될 것 같네요.
먼저, 오늘은 가로 또는 세로 방향으로만 고정하는 방법에 대해 말씀드릴께요.
1. 가로 또는 세로 방향으로 고정하는 방법
먼저, 안드로이드에서 방향을 고정하기 위한 방법은 두가지가 있습니다.
첫번째는 AndroidManifast.xml 의 <activity android:screenOrientation> 을 이용해 가로 또는 세로로 고정시키는 방법입니다.
<activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="portrait">
그리고, screenOrientation 에서 사용할 수 있는 value는 아래 안드로이드 Developer 사이트를 참조 부탁드립니다.
https://developer.android.com/guide/topics/manifest/activity-element#screen
두번 째는 소스코드 상에서 AppCompatActivity의 setRequestedOrientation() 메소드를 이용해 고정 시키는 방법 입니다.
아래 예제 코드처럼 onCreate() 메소드에서 사용하시면 됩니다.
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }
참고로 setRequestedOrientation() 을 이용한 이 방법은 Activity가 recreate 될 수 있습니다.
만약에 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 로 고정하고,
휴대폰을 가로 방향으로 두고 해당 Activity를 실행시킨다면, Pause -> Stop -> Destory 과정을 거치고, Activity가 onCreate 부터 재실행되는 것을 볼 수 있습니다.
https://developer.android.com/reference/android/app/Activity.html#setRequestedOrientation(int)
그리고, 포그라운드 엑티비티 기준으로 화면회전(구성변경) 설정이 적용됩니다.
예를 들어 설명하면, Activity A (화면 고정 안함) -> Activity B (가로 고정) 이라면 B가 포그라운드인 상태에서 화면회전을 하면 당연히 가로화면으로만 보일 뿐 화면회전이 되지 않을 겁니다.
Activity B를 종료시키면 Actvity A가 포그라운드 상태가 되는데, Activity B를 실행 시킬 때 A의 화면방향과 동일한 방향이라면 엑티비티가 재시작되지 않을 것이고, 화면방향이 바뀐 상태라면 엑티비티가 재시작 되는 것을 볼 수 있습니다.
Activity A가 가로 상태에서 Activity B 실행 -> 휴대폰을 세로로 방향전환 -> Activity B 종료 -> Activity A 세로모드로 재실행 됨
(*포그라운드(foreground) : 사용자와 인터랙티브(interactive) 가능한 상태. 엑티비티 기준으로 쉽게 이야기하면 사용자의 명령을 실행시킬 수 있는 가시적 수명 onStart() ~ onStop() 까지의 상태를 이야기 한다고 생각한면 됩니다.)
다음 포스팅에는 구성(Configuration) 변경으로 인한 엑티비티 재시작에 대해서 포스팅하도록 하겠습니다.
'Tech & Programming > 모바일(Android, Flutter)' 카테고리의 다른 글
org.apache.commons.io 라이브러리에서 java.lang.NoSuchMethodError 에러 해결 (0) | 2019.11.14 |
---|---|
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground() 오류 해결 (0) | 2019.10.01 |
구성변경(Configuration)에 따른 엑티비티 재시작 (0) | 2019.09.13 |
[안드로이드] Migrating to the New Places SDK Client (구 버전은 2019.7.29 종료) (0) | 2019.08.05 |
View의 내용을 어떻게 이미지 파일로 만들었나요? (0) | 2019.05.07 |