조회 수 349 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print


android:configChanges="screenLayout|screenSize|smallestScreenSize|density|orientation|layoutDirection|locale|fontScale"



화면이 회전해 가로/세로모드가 변경될 때에는 onDestroy() 이후 onCreate()가 다시 시작된다고 했었다.

하지만 화면이 돌아갈 때마다 onCreate()부터 시작해서 모든 값들을 다시 가져올 필요는 없지 않은가.

온라인에서 뭔가를 다운로드 해야 하는 상황을 가정하면 더 그렇다.

회전을 하면 처음부터 다시 다운받는다니. 아 이건 좀.

 

화면을 돌리더라도 지금까지의 상태를 지속하면서 화면 구성만 변경할 수 있다면 좋지 않을까?

Manifest에서 수정할 수 있는 Activity별 configChanges는 그런 편의성을 제공한다.

Activity의 configChanges값에 '변경될 수 있는 설정'들을 지정해주면, 이 설정들이 변경되더라도 액티비티가 재시작되지 않는다.

이렇게 하면, onDestroy() -> onCreate() 대신에 onConfigurationChanged() 메서드가 실행되어 view가 유지된다.

 

설정 방법

AndroidManifest.xml 파일에는 어플리케이션과 관련된 여러가지 정보들이 기록되어 있다.

어플리케이션에 포함된 Activity들에 대한 정보도 여기에 포함되며, <activity>태그 안에 각 액티비티 정보가 제공된다.

이 태그 안에 android:configChanges 값을 설정하면 '변경되더라도 상태를 유지할 설정값'들이 지정된다.

 

이를테면 아래 내용과 같이 지정할 수 있다.

        <activity
            android:name=".MainActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"/>

이 acitivity에는 configChanges로 keyboardHidden, orientation, screenSize의 3가지가 지정되었다.

keyboardHidden은 키보드를 띄우고 다시 숨길 때 설정을 유지하겠다는 뜻이고,

orientation은 화면의 가로모드/세로모드가 전환될 때 설정을 유지하겠다는 뜻이다.

화면이 회전할 때에는 orientation 외에 screenSize 속성도 함께 설정해 주어야 정상적으로 적용된다.

 

이렇게 설정해 준 이후에 액티비티를 실행하고 화면을 전환해 보면 액티비티가 리셋되지 않고 돌아가기만 하는 것을 볼 수 있다.

 

onConfigurationChanged()

configChanges를 설정해 준 값들에 대해서는 onDestroy() -> onCreate() 대신 onConfigurationChanged()가 호출된다.

따라서 만약 화면 전환에 따라 layout을 다르게 바꿔 주고 싶다면 이 메서드를 오버라이딩해서 수정하면 된다.

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        if (resources.configuration.orientation == ORIENTATION_LANDSCAPE) { // landscape
            recycler_view.layoutManager = glManager // grid layout
        } else { // portrait
            recycler_view.layoutManager = llManager // linear layout
        }
    }

예를 들어 위와 같이 onConfigurateionChanged 함수 안에서 orientation 변경 시에 실행할 내용을 설정해 줄 수 있다.

이 코드에서는 resources.configuration.orientation이 가로(ORIENTATION_LANDSCAPE)일 경우에는 그리드 레이아웃을,

세로(ORIENTATION_PORTRAIT)일 경우에는 리니어 레이아웃을 선택하는 방식으로 화면 구성을 변경하였다.


출처: https://holika.tistory.com/entry/내-맘대로-정리한-안드로이드-configChanges-화면이-돌아가도-상태는-유지하고-싶어요 


Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
510 일반 ChatGPT 프롬프트 작업 secret 2024.10.29 0 0
» Android configChanges : 화면이 회전해도 상태는 유지 2024.10.08 349 0
508 Android 안드로이드 Resource 구분 2024.07.09 961 0
507 Android Android strings.xml에 HTML 코드 넣기 2024.07.03 939 0
506 Android 대화상자 만들기 메모 2023.11.01 2795 0
505 Android Flutter 문법 정리 secret 2023.09.24 0 0
504 일반 PROMPT Example secret 2023.05.22 0 0
503 HTML5 typescript 기본문법 정리 2023.01.13 3463 0
502 HTML5 TypeScript 문법 정리 2023.01.13 3113 0
501 HTML5 [TypeORM] TypeORM CreateQueryBuilder 2023.01.13 3395 0
500 HTML5 React 리액트 프로그래밍 Note secret 2023.01.01 0 0
499 JAVA [JAVA] 람다식 기본 예제 1 (map, filter, reduce, collect) 2022.11.04 3250 0
498 PHP [MySQL] 뷰 생성하기(VIEW 생성하기) 2022.10.12 2919 0
497 PHP sQL:: JOIN, UNION 사용법 2022.09.05 3120 0
496 PHP SQL :: EXIST , NOT EXIST 2022.09.05 3612 0
목록
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 10 ... 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5