在 Android Jetpack Compose 中管理区域设置

Moh*_*ram 8 android locale android-jetpack-compose

如何使用 android Jetpack Compose管理区域设置。compose 如何找到要在视图中设置的区域设置。

Sty*_*kis 12

androidx.compose.ui.text.intl.Locale存在,如果它满足您的需求,那就太好了,您可以Locale.current经常使用 java.util.Locale 来代替。

为此,我建议使用这样的函数

@Composable
@ReadOnlyComposable
fun getLocale(): Locale? {
  val configuration = LocalConfiguration.current
  return ConfigurationCompat.getLocales(configuration).get(0)
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要默认Locale.getDefault()返回任何内容而不是空,您可以将其调整为:

@Composable
@ReadOnlyComposable
fun getLocale(): Locale {
  val configuration = LocalConfiguration.current
  return ConfigurationCompat.getLocales(configuration).get(0) ?: LocaleListCompat.getDefault()[0]!!
}
Run Code Online (Sandbox Code Playgroud)

使用这一点很重要LocalConfiguration.current,这样如果配置发生更改,该函数将重新组合,您将获得最新的区域设置而不是过时的区域设置。我最近进行了一次讨论,其中提到了这一点。

ConfigurationCompat.getLocales确保它适用于所有 API 版本。如果您的 API >= 24 无论如何,请LocalConfiguration.current.locales直接使用。

额外好处:在使用每个应用程序语言 API时,这也能完美工作,因为它返回在应用程序语言设置中选择的任何语言。