[Android] 안드로이드 접근성 - 화면 크기 조절, 폰트 크기 조정 설정 제거하기
접근성이란...
구글에서는 여러 가지 이유로 핸드폰을 사용하 어려운 유저들을 위해서 기기 제어에 관련된 지원을 하면서 접근성을 많이 신경 쓰고 있다.
안드로이드의 접근성으로는
청각 보조 지원, 시각 보조 지원, 모바일 지원 기능이 있다.
Talkback, 디스플레이 조정, 음성 명령, LookOut (주변 사물 인식), 스위치로 기기 제어, 점자 디스플레이 , 돋보기 등등 다양한 기능을 지원한다
그중 오늘 다룰 문제는 디스플레이 조정에 관련된 문제였다.
지금 진행하고 있는 프로젝트는 연령층이 꽤나 높은 유저들을 타깃으로 하는 앱이기 때문에 접근성을 고려한 UI를 구현하고 있었다.
그래서 UI 자체가 큼직큼직하고, 글씨도 최대한 크게 디자인되어 만들고 있었는데
해당 기능들이 문제가 되었다
폰트가 원래 크고 UI도 원래 큰데 저 설정들을 넣으면 폰트와 UI가 더 커져서 오히려 보기 힘든 앱이 되어버리게 된 것이다
그래서 문제를 해결하기 위해서 방법을 찾아 나섰다
방안 1
지금 프로젝트는 Compose를 쓰고 있었기 때문에 CompositionLocalProvider를 사용하여 폰트 크기가 커지는 것을 막을 수 있었다
CompositionLocalProvider(
LocalDensity provides
Density(
LocalDensity.current.density,
1f,
),
) {
}
하지만 화면 크기 조절을 막는 법을 찾지 못하였고, 해당 코드가 Dialog에는 일일이 추가해 주지 않으면 적용되지 않는 모습이 보였다
그래서 다른 방법을 찾았다
바로 Activity에서 코드를 추가하는 방식인데
override fun attachBaseContext(newBase: Context?) {
val newOverride = Configuration(newBase?.resources?.configuration)
val metrics = newBase?.resources?.displayMetrics
if (metrics?.densityDpi != DisplayMetrics.DENSITY_DEVICE_STABLE) {
newOverride.densityDpi = DisplayMetrics.DENSITY_DEVICE_STABLE
}
if (newOverride.fontScale >= 1.1f)
newOverride.fontScale = 1.1f
applyOverrideConfiguration(newOverride)
super.attachBaseContext(newBase)
}
해당 코드를 추가해 주면 된다
attachBaseContext 함수에서 Configuration을 만들고 Configuration에 폰트 크기와 화면의 크기를 기본값으로 돌린 후 apply해주는 코드이다.
해당 코드를 Activity에 추가해 주면 화면 크기 설정과 폰트 크기 설정을 제어할 수 있다.