📱 Android

[Android/kotlin] 시스템 폰트 크기에 영향받지 않게 하기

콩드로이드 2020. 7. 27. 11:34

font size DP 선언

이전 포스팅에서도 정리한 적이 있지만

 

dp는 물리적인 디스플레이 해상도에 영향을 받지 않기 때문에 해상도에 따라 맞춰주지 않아도 된다.

반면, sp의 경우는 dp와 유사하지만 물리적인 디스플레이 해상도에 영향을 받는다.

그렇기 때문에 해상도에 영향을 받지 않으려면 dp로 TextSize를 정해주면 된다

 

(Galaxy S8 기준) 안드로이드 설정-> 디스플레이 -> 글자 크기와 스타일에 들어가면 글자 크기를 조절할 수 있는데, 부끄럽게도 이번에 처음 확인을 해보았다.

결과는 대참사가 일어났다. UI는 뒤죽박죽이 되었고, 심지어 잘려서 보이지 않는 텍스트가 발생했다.

부랴부랴 TextSize를 dp로 변경했지만, 내가 놓친 부분이 2개나 있었다.

 

TextView가 programmatically로 생성했을 경우

xml이 아니라 소스코드에서 TextView에 TextSize를 적용한 경우

 

val tv = TextView(context!!)
val params = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT)
tv.layoutParams = params
tv.textSize = 17F

위와 같이 tv.textSize = 17F로 선언되어있으면 해상도에 영향을 받는다.

 

val tv = TextView(context!!)
val params = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT)
tv.layoutParams = params
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17f)

TextSize를 Float으로 선언한 부분을,
간단하게 tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17f) DP를 선언해서 Size를 주었다.

 

WebView

WebView안에 TextSize도 해상도에 영향을 받는다


다 적용했다고 생각했지만, WebView의 Text도 영향을 받는다는 사실을 잊고 있었다.

역시나 WebView의 Text도 엉망진창, 심지어 잘려서 안 보이는 텍스트도 있었다.

WebView의 설정도 생각보다 매우 간단하다.

공식 문서 참조

webView.settings.textZoom = 100

 

이 부분만 추가해주면 끝이다. 위 사진에서 보이는 것 처럼 setTextZoom의 기본값인 100을 넣어주었다.

API버전이 14보다 낮은 것이 포함되어 있다면 아래의 조건문만 걸어주면 된다.

 

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH)
 webView.settings.textZoom = 100

해상도에 관해선 따로 신경을 쓰고 있지 않아서 이런 현상이 발생한 것 같다..

개발할 때 조금 더 신중해야겠다