안녕하세요. 이번 포스팅에서는 환경설정을 통한 기기 자체의 디스플레이 크기 변경에 app이 영향 안받도록 하는 코드를 포스팅하겠습니다.
기기 환경설정 -> 디스플레이 -> 화면 크게/작게 로 이동시 다음과 같은 화면에서 기기의 앱들의 사이즈를 변동할수있습니다.
저희는 앱을 만들시 디자인에 맞춰 각 view, layout, drawble 리소스 등을 크기를 저희가 원하는 값으로 설정하여 사용합니다. 근데 위 설정값을 변경할 경우 그 영향을 받아 비율이 변경되게 됩니다.
그 이유는 안드로이드는 dp(dpi) 로서 dpi 값별 픽셀의 수가 달라지기 때문입니다.
override fun attachBaseContext(baseContext: Context) {
val newContext: Context
val displayMetrics: DisplayMetrics = baseContext.resources.displayMetrics
val configuration: Configuration = baseContext.resources.configuration
if (displayMetrics.densityDpi != DisplayMetrics.DENSITY_DEVICE_STABLE) {
// 휴대폰 설정값과 app 에서의 값이 다를경우 app 값으로
configuration.densityDpi = DisplayMetrics.DENSITY_DEVICE_STABLE
newContext = baseContext.createConfigurationContext(configuration)
} else {
// layout 과 장치 화면 설정 비율(밀도)동일 시
newContext = baseContext
}
super.attachBaseContext(newContext)
}
우선 결론부터 말씀드리면 해당 코드를 크기를 고정시킬 activity에 추가하시면 됩니다.
만약 app 전체에 영향을 안받게 하고싶으실 경우 각 activity를 생성할때 base 로 삼은 BaseActivity가 있다면 여기에만 추가하시면 됩니다.
위 코드를 간략히 설명드리면 각 activity에는 context가 있는데 이 context가 생성될때 휴대폰 dpi값과 기본 stable density 값이 다를 경우 stable 값을 가진 context 로 변경시키는 것입니
위 코드를 이해하시기 위해 참고할 개념은 크게 context부분과 displayMetrix, 그리고 displayMetrix의 densityDpi 입니다.
1.density: 위에 설명드린 dpi와 같은 개념으로 밀도 값 입니다.
2. displayMatrix 는 크기, 밀도, 글꼴 등 디스플레이에 대한 일반 정보를 설명,제공해줍니다.
3.attachBaseContext: 기본 컨텍스트를 설정하는 것으로 어플리케이션 리소스 및 시작활동 등 애플리케이션 수준 작업을 위한 기본으로 이러한 context를 기본 생성한 메소드입니다.
기기 환경설정에 영향을 안받게하는 방법은 다양하게 있겠지만 이러한 방식을 통해 크기 조정을 막을수있습니다.
'안드로이드 > androidstudio' 카테고리의 다른 글
[Android] DataStore, Preference 활용 설정 값 저장하기 (0) | 2023.10.06 |
---|---|
[Android] NaverMap api 기기 방향 탐지 (0) | 2023.04.21 |
[Android] Kakao Map Marker event(drag, click) (0) | 2022.12.09 |
[Android] livedata의 observe 중첩 상황 (0) | 2022.12.08 |
[Android] retrofit 통해 data 가져오기 (0) | 2022.12.06 |