该应用支持 8.0 及以上的操作系统。
我已经添加了支持
更新
使用@Nurbol的响应,我已经更新了BaseActivity如下,并且它正在正常工作。我的问题现在是:Activity A -> Activity B(在这里我切换语言环境),然后如果我按返回键并且系统恢复Activity A,则它具有旧的配置和旧的语言环境。如何克服这个问题?
我已经添加了支持
strings.xml
的 values-ar
文件夹。如果我将手机设置更改为阿拉伯语,应用程序会加载正确的资源。
如果我在 Application
类中运行时设置默认语言环境,则无法加载特定的(“ar”)资源。
这是我如何更改配置文件(在Application
类中):
fun changeDefaultLocale() {
Locale.setDefault(Locale("ar")
val configuration = resources.configuration
configuration.setLocale(locale)
this.createConfigurationContext(configuration)
}
我尝试过以下方法:
- 将
values-ar
重命名为values-ar-rEG
- 在
app/build.gradle
中添加resConfigs "en", "ar"
- 在
Manifest/<application
中添加android:configChanges="locale"
- 使用
Locale("ar","AE")
或Locale("ar","EG")
我在调用上述changeDefaultLocale()
函数后的下一行设置了断点:
更新
使用@Nurbol的响应,我已经更新了BaseActivity如下,并且它正在正常工作。我的问题现在是:Activity A -> Activity B(在这里我切换语言环境),然后如果我按返回键并且系统恢复Activity A,则它具有旧的配置和旧的语言环境。如何克服这个问题?
override fun attachBaseContext(base: Context) {
super.attachBaseContext(updateBaseContextLocale(base))
}
private fun updateBaseContextLocale(context: Context): Context {
val locale = Locale("ar")
Locale.setDefault(locale)
return updateResourcesLocale(context, locale)
}
@TargetApi(Build.VERSION_CODES.N)
private fun updateResourcesLocale(context: Context, locale: Locale): Context {
val configuration = context.resources.configuration
configuration.setLocale(locale)
return context.createConfigurationContext(configuration)
}