프로그래밍/android

[android] 강제 회전 시키기 #screenOrientation (portrait <---> landscape)

-샤리- 2021. 1. 6. 13:59

대부분의 앱은 세로모드(portrait)로 고정해서 개발을 하는데, 필요할 때 가로(landscape)로 전환해야 할 때가 있다. 폰의 회전에 따라서 자동으로 바뀌는 것이 아니라 회전과는 무관하게 그냥 가로모드/세로모드를 변경해야 할 때가 있다는 것이다.

 

1. 자동회전이 아닌, 강제로 가로/세로로 바꾸게 되면 onConfigurationChanged(newConfig: Configuration) 함수가 호출되지 않고 onCreate(savedInstanceState: Bundle?)로 진입되어 화면을 새롭게 그려야 한다. 그렇기 때문에 반드시 android:configChanges="orientation|screenSize" 를 지정해 주어야 한다.

<activity android:name=".YourActivity"
		android:screenOrientation="portrait"
        android:configChanges="orientation|screenSize"
        />

 

2. 회전되었을 때 onConfigurationChanged로 이벤트가 들어오면 세로/가로에 필요한 코드를 적용한다.

override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)

        when(newConfig.orientation) {
            Configuration.ORIENTATION_PORTRAIT -> {
            	// 세로모드 코드 적용
            }
            Configuration.ORIENTATION_LANDSCAPE -> {
            	// 가로모드 코드 적용
            }
        }
    }

 

3. 강제회전

// 세로모드로 전환
btToPort.setOnClickListener {
	requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}

// 가로모드로 전환
btToLand.setOnClickListener {
	requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
}