gpt4 book ai didi

Android 设置 Nightmode 更改资源语言

转载 作者:行者123 更新时间:2023-11-30 04:59:50 26 4
gpt4 key购买 nike

这是一种难以描述的效果。

我们的 Android 应用程序支持两种语言,但我们不使用系统语言,而是让用户在设置中进行设置。然后,在附加应用程序的 BaseContext 之前,我们设置了语言环境配置。

// in Application class
override fun attachBaseContext(base: Context) {
super.attachBaseContext(LocaleHelper.onAttach(base))
}

// the LocaleHelper
fun onAttach(context: Context): Context {
return setLocale(context, getPersistedLanguage(context), getPersistedCountry(context))
}

通过这种方式,attachBaseContext 调用会获得一个上下文,该上下文的语言环境设置为例如“de”而不是“en”——即使设备是英文的。

这到目前为止效果很好,并且根据设置,来自上下文的所有资源都使用该语言。但是,我们现在为夜间模式添加了另一个设置(即让用户可以选择将“主题”设置为“正常”或“深色模式”)。

出于这个原因,我的想法是设置这样的东西

if (enableDarkMode) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}

在Application的onCreate()中(我们在Activity中也试过)。

但是,这样做,资源(至少一些)突然加载了设备区域设置。菜单条目使用设备语言。然而,检查 Locale.getLanguage() 给我配置的语言和动态调用的字符串(例如 context.getString(R.string.xyz))也以正确配置的语言显示。

这导致假设菜单资源在某种程度上(重新)加载(再次)但不遵守 JVM 设置的区域设置。

有谁知道如何找到该错误?我们在这里缺少什么?菜单资源加载是否不同?

最佳答案

我刚刚发现了一个 hacky 解决方案,但如果有人遇到同样的问题,这可能会有所帮助:

我添加到 list 中的 Activity

android:configChanges="uiMode"

告诉应用程序“自己处理 ui 模式更改”。在那种情况下,资源保持“不变”,但我不确定此更改可能还有什么其他影响。

因此,如果您有任何关于让系统/应用程序自行处理夜间模式更改时出了什么问题的进一步提示,请告诉我。

关于Android 设置 Nightmode 更改资源语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58430399/

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