如何使用 android Jetpack Compose 管理区域设置。 compose 如何找到要在视图中设置的区域设置。
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)
}
或者,如果您想默认为
Locale.getDefault()
返回的值且不为空,您可以将其调整为:
@Composable
@ReadOnlyComposable
fun getLocale(): Locale {
val configuration = LocalConfiguration.current
return ConfigurationCompat.getLocales(configuration).get(0) ?: LocaleListCompat.getDefault()[0]!!
}
使用
LocalConfiguration.current
非常重要,这样如果配置发生更改,该函数将重新组合,您将获得最新的区域设置而不是过时的区域设置。我最近进行了此讨论,其中提到了这一点。
ConfigurationCompat.getLocales
确保它适用于所有 API 版本。如果您使用的 API >= 24,请直接使用 LocalConfiguration.current.locales
。
奖励:在使用每个应用程序语言 API 时,这也可以完美工作,因为它返回在应用程序语言设置中选择的任何语言。
要从可组合项访问区域设置,请使用以下命令:
Locale.current
https://developer.android.com/reference/kotlin/androidx/compose/ui/text/intl/Locale#current()
import androidx.compose.ui.text.intl.Locale
val local = Locale.current
java.util.Locale(locale.language)