본문 바로가기
Android 개발/android :: Tip

[안드로이드 액티비티] 화면 고정 방법 / 화면 회전 시 activity 초기화 현상 막기

by 독학하는 1인 개발자 2019. 9. 20.

Android 개발 Tip.

 

- 화면 회전 시 Activity 초기화 막는 방법

 

액티비티(Activity) 화면 가로/세로 고정 방법

 

configChanges

 

onConfigurationChanged

 

 



 

 

안드로이드는 기본적으로

 

화면을 가로에서 세로 또는 세로에서 가로로

 

화면을 회전할 경우

 

activity가 재실행된다.

 

 

그래서 현재 진행중인 상태 및 데이터가 초기화 되어 버리는데

 

이를 방지하기 위해서는

 

해당 activity에 약간의 설정이 필요하다.

 

 

도대체 왜 이렇게 만들었으며

 

왜 아직까지도 고치지 않을까?

 

고치지 못하는 걸까?

 

안 고치는 걸까?

 

아니면 나만 초기화 되는 것을 싫어하고

 

사실은 초기화 되는 것을 선호하는 개발자나 유저가 많은걸까?

 

나는 아직 우물안 개구리 1인 개발자라서 잘 모르겠다.

 

 

 

 

1. 화면 회전 시 초기화 방지

 

Step1.

Manifests 파일에 들어가서

해당 Activity 부분에 다음 코드를 삽입한다.

 

android:configChanges="screenSize|orientation">

 

1
2
3
<activity android:name=".MyActivity"
    android:configChanges="screenSize|orientation">
</activity>
cs

 

 

Step 2.

MainActivity 또는 초기화를 막으려는 Activity 에 다음 코드를 추가한다.

 

onConfigurationChanged()

 

1
2
3
4
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}
cs

 

 

 

 

*어디에 넣는지 헷갈리면 참고하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MyActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
    }
 
 
 
    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }
 
}
cs

 

 

이렇게 하면 화면을 회전해도

 

회전하기 전 상태가 유지된다.

 

 

 

물론 간단한 코드라면 저렇게 해결이 되지만,

 

activity가 복잡할 수록

단순히 저 코드로 해결이 안 되는 경우도 많다.

 

 

그래서 기업 규모에서 만든 앱이나

많은 사람들이 쓰는 유명 앱도 살펴보면

가로 전환이 지원되지 않는 경우가 많다.

 

물론 애초에 디자인이 가로나 세로에 맞춰서 나온 경우는 예외지만

그렇지 않은 경우인데도 화면 회전을 막아둔 앱이 많다.

 

리뷰를 보면 엄청나게 많은 유저들이 가로 화면을 요청하고 있는데

그래도 꾸준히 반영이 되지 않는 걸 보면

그만큼 안드로이드는 화면 회전이 까다롭다는 걸로 밖에 볼 수 없다.

쉽게 되면 벌써 반영해주겠지 안 해줄리가 없으니 말이다.

 

 

그래서 너무 어렵다 싶으면

그냥 화면을 고정해버리는 것도 나쁘지 않다고 본다.

수십 수백명의 전문가가 만드는 앱도 지원하지 않는 경우가 많기 때문에

너무 자책할 필요가 없다고 본다.

(물론 되는 앱도 많은데, 안 되는 앱도 그만큼 엄청나게 많다.)

 

이런 식으로 얘기하면 실력탓을 하라는 사람도 있던데

"어이구 얼마나 실력이 잘나시길래

국내 해외 최고 실력자들도 해결 못하는 걸 쉽게 할 줄 아는 분이

아직 여기 계세요?" 라고 해주자.

 

세상에는 입만 산 사람들이 참 많다.

 

 

 

 

2. 화면 고정 코드

 

마찬가지로 해당 activity 부분에 속성으로 넣는다.

 

1
2
android:screenOrientation="portrait" // 화면 세로 고정
android:screenOrientation="landscape" // 화면 가로 고정
cs

 

Manifests 파일에서

 

해당 액티비티의 <activity> </activity> 사이

 

둘 중 하나를 넣으면 된다.

 

 

 

 

댓글