728x90
앱 개발이 완료되어가는 시점이다
눈이 안좋은 사람들이
시스템 설정상의 폰트 크기를 조정해서
앱의 텍스트나 디자인이 깨지는것을
방지하기위한 체크를 하는 도중
(안드로이드에서만)
앱을 백그라운드로 실행해둔 상태에서
환경 설정에서 폰트 크기를 변경한 뒤
다시 앱으로 돌아오니
앱이 튕겨버리는 현상이 나타났다.
추적결과
react-native-screens에서
문제가 있는것으로 발견되었다.
rn-screens docs에도 나와 있듯이
// MainAcitivity.java
import android.os.Bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null); <-- 여기
}
이 부분을 수정해줌으로써
튕겨버리는 이슈가 해결되었다.
그런데 여기서 파생된 이슈가 있었다.
우리는 기본적으로 폰트에
dp 단위 + font scale 무시를 적용하는데,
위의 null 처리로 인해
백그라운드의 앱이 열렸을때
무조건 그 당시의 font-scale을
1로 간주해버리는 것이 아닌가...
바꿔 말하자면,
사용자가 시스템 설정에서
폰트 크기를
1 -> 2로 변경한뒤 앱을 열면
앱이 2라는 것을 1이라는 기준으로 잡아버린다.
따라서, font scale을 무시하는
우리의 코드는 오작동을 했다.
(우리의 폰트 크기 = dp / font scale)
따라서, storage에 항상
이전 폰트 크기를 저장해뒀다가
폰트 크기가 변경된 경우
앱을 재실행 하는 코드를 추가하였다.
(재실행하면 font-scale 기준을 제대로 잡게됨)
const detectChangeFontScaleOnAndroid = async () => {
const fontScale = PixelRatio.getFontScale();
const _fontScale = await storage.getItem('fontScale');
storage.setItem('fontScale', fontScale?.toString());
if (_fontScale && _fontScale !== fontScale.toString()) {
console.log('changed font scale');
Platform.OS === 'android' && CodePush.restartApp();
}
}
728x90
반응형
'개발, 코딩 > App - React Native' 카테고리의 다른 글
ReactNative, 푸시 알림 완벽하게 구현하기 (2) | 2022.01.10 |
---|---|
iOS, rootview background-color (0) | 2022.01.05 |
react-native, local notification 적용하기 (0) | 2021.12.23 |
react-native, ios app crash when press notification. (0) | 2021.12.22 |
[xcode] failed to get the task for process (0) | 2021.12.22 |