Tech & Programming/모바일(Android, Flutter)

안드로이드 가로/세로모드 고정하는 방법

소스코드 요리사 2019. 9. 13. 15:05

최근 회사에서 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

 

<액티비티>  |  Android Developers

Declares an activity (an Activity subclass) that implements part of the application's visual user interface. All activities must be represented by {@code } elements in the manifest file. Any that are not declared there will not be seen by the system…

developer.android.com

 

  두번 째는 소스코드 상에서 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) 변경으로 인한 엑티비티 재시작에 대해서 포스팅하도록 하겠습니다.