gpt4 book ai didi

android - 如何以编程方式更改 Android App 中 Activity 的语言环境

转载 作者:行者123 更新时间:2023-11-29 22:40:04 24 4
gpt4 key购买 nike

我想在 App 中更改我的语言(或从 SQLite 数据库中保存的变量中设置它)。它正在工作,但它的行为真的很奇怪。如果我打开我的应用程序,它会在 onCreate 中更改 Locale 但如果我从 MainActivity 开始新的 Activity,那个新的 Activity(它是全新的app start - never stopped/paused before)是默认系统语言。如果我退出此 Activity 并再次启动 Intent,它会突然使用已保存的语言。只有第一次启动是加载系统语言。

我有我的 Activity 抽象类,它扩展了我应用程序中的所有 Activity。

代码:

lateinit var app: App

override val coroutineContext = Job()

override fun onCreate(si: Bundle?) {
app = application as App
LocaleHelper.changeLocale(this, app.getSavedLanguage())
super.onCreate(si)
}

class LocaleHelper {

companion object{
fun changeLocale(context: Context, lang: String){
val newLocale = Locale(lang)
Locale.setDefault(newLocale)
val res = context.resources
val conf = res.configuration
conf.setLocale(newLocale)
res.updateConfiguration(conf, res.displayMetrics)
}
}
}

最佳答案

我认为您需要在每个 Activity 中更改语言,我不确定您到底想要实现什么,但这就是我在应用程序中处理本地化的方式

首先,创建一个类来处理本地化并返回 ContextThemeWrapper 以创建具有指定主题的新上下文包装器。

class Localization(base: Context) : ContextThemeWrapper(base, R.style.AppTheme) {
companion object {

fun wrap(context: Context, language: String): ContextThemeWrapper {
var ctx = context
val config = context.resources.configuration

if (language != "" || language != "en")
)
) {
val locale = Locale(language)
Locale.setDefault(locale)
//Using setLocale b/c my version is > 17
config.setLocale(locale)
// Used setLayoutDirection for RTL and LTR
config.setLayoutDirection(locale)
ctx = context.createConfigurationContext(config)
}

//Save the selected language in shared Preference,
//context.putString("my_lang", language)

return Localization(ctx)
}
}

然后在需要更改语言时调用那个wrap函数

wrap(this, "en")

在更改语言和获取当前语言时使用 sharedPreference在你的 Activity 中。覆盖 attachBaseContext 并使用当前语言调用 wrap 函数

override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(
wrap(
newBase,
"en"
)
)

}

Note: my recommendation is to use sharedPreference for Localization

关于android - 如何以编程方式更改 Android App 中 Activity 的语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59100386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com