본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] dpi 값이 바뀔 수 있구나?!! ㄷㄷㄷ

by 돼지왕 왕돼지 2020. 8. 15.
반응형


android dpi change



-

이슈를 치다가 activity popup 모드를 접하게 되면서 activity popup 모드에서 어떻게 UI 들을 작게 그리는지를 팀원과 이야기하게 되었다.

팀원은 dpi 값이 줄어들 것이 명백하다라고 했고, 나는 그렇다면 popup 모드로 변환하면서 그럼 res 의 참조들도 변하는거냐? xxhdpi -> xhdpi 가 되는거냐? 라고 물었다. 그래서 나는 명백한지는 모르겠다고 의견을 개진했다.


처음에는 흥미가 없었는데 흥미가 생겨 테스트해보기로 했다.



-

일단 popup 화면으로 전환 / full screen 으로 전환시 activity 를 destroy 하고 recreate 한다.

manifest 의 configChanges 에 density 를 걸어주면 recreate 되지 않는다. 

단, 이 녀석은 API Level 24 (N-OS)부터 추가된 녀석이다.


참고로 configChanges option 으로 fontScale 도 있다.



-

xxhdpi 를 기본으로 사용하는 단말에서 string res 를 해상도에 맞게 문구를 바꿔 넣어놓고,

popup 모드를 수행하였다.


첫 화면은 420dpi 로 xxhdpi 로 문구를 표시하고, 

popup 은 321dpi 로  xhdpi 를 표시한다.



-

"그럼 시스템 세팅 -> 디스플레이 -> 글꼴 및 화면 확대" 를 통해 화면 확대를 조정하면 어떻게 될까?


일단 Activity 가 destroy 되면서 recreate 된다. (직접 테스트 한 건 아니지만 configChanges option 의 density 가 작동할 것으로 보인다.)

첫화면이 420dpi 로 나온다는 필자 테스트폰의 기본 설정은 “작게” 였다.

“보통”으로 바꾸고 앱을 진입하니 480dpi 가 나오며 xxhdpi 를 적용한다.

“크게” 로 바꾸고 앱을 진입하면 540dpi 가 나오며 xxhdpi 를 적용한다.



-

dpi 가 커지는 것에 대한 이해가 잘 되지 않아 곰곰히 생각해보았다.

dpi 가 커진다는 의미는, dp 값으로 설정된 view 를 그리기 위해 “기본(default)” 보다 더 많은 pixel 을 사용한다는 의미이다.

그런데 동일 device 에서 물리적 화면과 pixel 이 그에 맞게 같이 늘어나는 것이 아니기 때문에(총 pixel 은 고정되어 있기 때문에) pixel 을 더 많이 사용한다는 의미는 동일한 뷰가 더 크게 그려진다는 것이다.


즉, 물리적으로 동일한 화면에서 dpi 값이 작아지면 dp 로 설정된 view 에 대해 더 적은 pixel 을 사용하므로 더 작게 그리고, dpi 값이 커지면 dp 로 설정된 view 에 대해 저 많은 pixel 을 사용하므로 더 크게 그리는 효과를 얻는 것이다.



-

"시스템 세팅 -> 디스플레이 -> 글자 크기와 스타일" 을 통해 font size 를 조정하면 configChanges 의 font 에 영향을 받을 것으로 보인다.

또한 이 값의 조정은 Configuration.densityDpi 에는 영향을 주지 않고, Configration.fontScale 값에 영향을 준다.



-

정리하면..

"Activity popup mode" 로 전환시에는 dpi 가 낮아지며 dpi 값에 따라 다른 res 를 참조한다.

configChanges 의 density(API Level 24, N-OS 에 추가) 에 영향 받으며, 설정해주지 않으면 activity 는 recreate 된다.


"글꼴 및 화면 확대"로 화면 확대를 하면 dpi 가 높아진다.

dpi 가 높아진다는 의미는 동일 pixel 단말에서는 view 를 더 크게 그린다는 의미이다.

configChanges 의 density 에 영향을 받을 것으로 보인다.


"글자 크기와 스타일" 로 font size 조정은 configChanges 의 font 에 영향을 받을 것으로 보인다.

또한 fontSize 의 변화는 Configuration.densityDpi 값은 동일하며, Configuration.fontScale 값이 변경된다.



-

여튼.. 동일 device 에서 dpi 가 바뀌는 것을 생각해보지 않았던 내 입장에서 아주 특이하게 다가왔다.



-

끝!!




반응형

댓글