[안드로이드] 다국어 앱, 화면회전이 가능한 이유, Alternative resources

Chloe Choi·2021년 3월 18일
0

안드로이드

목록 보기
7/17

다국어앱, 화면회전 관련 port, land xml을 만들면서 들었던 궁금증. 어떻게 앱은 알맞는 리소스를 가져올까? 대충 디바이스에서 정보를 받아와서 맞는 리소스를 가져오겠지~ 생각했다. 실제로 어떻게 가져오는지 알아봤다.

안드로이드는 여러 특정 디바이스의 configurations에 맞는 alternative resources를 제공한다! 따라서 안드로이드는 런타임에 현재 디바이스의 configuration을 탐지하고 적절한 resource를 앱에 로드하게 된다.

우리는 개발 시 필요한 configuration-specific alternatives를 정의한다.

res/
ㄴ drawable/
ㅤㅤㄴ icon.png
ㅤㅤㄴ background.png
ㄴ drawable-hdpi/
ㅤㅤㄴ icon.png
ㅤㅤㄴ background.png

이렇게 하면 같은 리소스 아이디를 갖지만 안드로이드가 현재 기기에 가장 알맞는 것을 골라 가져오게 된다. 여러 configuration이 있는데 그건 여기서 확인!

그럼 안드로이드는 어떻게 가장 알맞는 리소스를 가져올까?

예를 들어, Drawable 디렉토리에 다음과 같이 이미지 버전들이 있는 상황이다.

drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

그리고 기기의 구성은 다음과 같다.

로케일 = en-GB
화면 방향 = port
화면 픽셀 밀도 = hdpi
터치 스크린 유형 = notouch
기본 텍스트 입력 방법 = 12key

큰 흐름은 다음과 같다.

  1. 기기 구성과 충돌하는 리소스 파일을 제거한다. (drawable_fr_rCA는 en-GB 로케일과 충돌하므로 제거!)

drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

  1. 에서 우선순위가 높은 순서로 탐색한다.
  2. 리소스 디렉토리 중 이 한정자를 포함한게 있는지 확인
    if not, 2단계로 돌아가 다음 한정자를 탐색
  3. 해당 한정자를 포함하지 않는 리소스 디렉토리는 제거한다.
    ex. 언어 한정자 확인 시

drawable/
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

위 과정을 리소스 디렉토리가 한 개 남을때 까지 반복! 결국, drawable-en-port 디렉토리가 남게 된다~

만약 기기 configuration과 일치하는 리소스가 없다면? 앱이 중단됨! 따라서, 꼭 기본 리소스를 제공해야 함

ref.
https://developer.android.com/guide/topics/resources/providing-resources#table2

profile
똑딱똑딱

0개의 댓글