如何在没有 AppCompatDelegate 的情况下以编程方式设置 Jetpack Compose 中的语言?

问题描述 投票:0回答:1

我正在尝试在我的 Jetpack Compose 应用程序中实现语言选择功能。然而,我在尝试使用

AppCompactDelegate
来实现这一目标时遇到了障碍。 Jetpack Compose 中似乎不提供
AppCompactDelegate

这是我尝试过的代码片段:

fun languageUpdate(context: Context, language: String){
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU){
            context.getSystemService(LocaleManager::class.java)
                .applicationLocales = LocaleList.forLanguageTags(language)
        } else {
            AppCompactDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(language))
        }
    }

由于

AppCompactDelegate
不是 Jetpack Compose 中的选项,我正在寻找替代解决方案以编程方式在我的应用程序中设置语言。任何指导或建议将不胜感激。

android-jetpack-compose android-jetpack android-appcompat appcompatdelegate
1个回答
0
投票

您可以使用

Resources.updateConfiguration()
方法直接更新应用程序的配置。

以下是实施方法:


fun updateLanguage(context: Context, language: String) {
    val locale = Locale(language)
    Locale.setDefault(locale)

    val configuration = Configuration(context.resources.configuration)
    configuration.setLocale(locale)

    context.resources.updateConfiguration(configuration, context.resources.displayMetrics)
}

并通过

onCreate()
调用它,或者如果您想从可组合函数调用它,则将上下文转换为 Activity:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    updateLanguage(this, "es")
}

或者,

@Composable
fun Sample() {
    val context = LocalContext.current as Activity
    updateLanguage(this, "es")
}
© www.soinside.com 2019 - 2024. All rights reserved.