Android) 각종 설정에 따른 UI 변경

성승모·2024년 7월 4일
0

언어 바꾸기

1. string.xml 영어 버전 추가

  • string.xml 파일을 연다.

  • 오른쪽 위 Open editor를 누른다.

  • 지구본 모양을 눌러 en 을 추가한다.

  • 해당하는 string value들을 영문으로 바꾸어 넣는다.

2. 바꾸기

	val appLocale = LocaleListCompat.forLanguageTags("ko")
    AppCompatDelegate.setApplicationLocales(appLocale)
  • Locale 변수를 가져온다.
  • 태그는 한국어: ko, 영어: en 이다.
  • 이를 setApplicationLocales에 인자로 넘겨주면 된다.

테마 바꾸기

1. Colors.xml value-night 추가 및 정의하기

  • res/values에 Values Resource 추가
  • values-night 로 설정 후 이름은 똑같이 colors 로 한다.
  • colors.xml(night)가 생성되면 원래의 colors.xml의 복붙하여 색상 코드만 바꿔준다. (name 태그로 구분함)

2.default dark mod 이용하기

  • 원하는 버튼에 아래 코드를 넣어준다.
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)	// 라이트 모드
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)	// 나이트 모드

폰트 크기 바꾸기

val configuration= this.resources.configuration
val scale = when(fontSize.name) {
    FontSize.Normal.name -> 1.0f
    FontSize.Large.name -> 1.2f
    else -> throw Exception()
}

configuration.fontScale = scale

//TODO: deprecated 된거 바꾸기
val metrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(metrics)
metrics.scaledDensity = configuration.fontScale * metrics.density

baseContext.resources.updateConfiguration(configuration, metrics)

위 코드를 추가해준다.
display metrics를 이용하여 font size를 늘린다.

  • deprecated 된 함수, 프로퍼티가 많다.
defaultDisplay

getMetrics(m: DisplayMetrics)

DisplayMetrics.scaledDensity

baseContext.resources.updateConfiguration(
config: Configuration, metrics: DisplayMetrics
)

또한 백스택에 존재하는 activity들에 대해서는 적용이 안되는 것을 발견하였다.
따라서, sharedPreference에 값을 저장하고 앱을 재시작해야 할듯하다. 또는 BaseActivity를 만들고 onResume에 위 코드를 추가하면 될거 같지만... 예쁘지가 않다

profile
안녕하세요!

0개의 댓글