java - 如何更改 Android O/Oreo/api 26 应用程序语言

标签 java android locale default

我想更改应用程序的语言,这在 API 26 之前可以正常工作。

对于 api > 25,我将 Locale.setDefault(Locale.Category.DISPLAY, mynewlanglocale); 放在 setContentView(R.layout.activity_main); 之前,但没有任何变化。

docs这个不用过多解释。

最佳答案

我遇到了同样的问题:由于 Android 8.0+,我的应用程序的某些部分不再更改它们的语言。更新应用程序和 Activity 上下文对我有帮助。下面是 MainActivity 函数的一个例子:

private void setApplicationLanguage(String newLanguage) {
    Resources activityRes = getResources();
    Configuration activityConf = activityRes.getConfiguration();
    Locale newLocale = new Locale(newLanguage);
    activityConf.setLocale(newLocale);
    activityRes.updateConfiguration(activityConf, activityRes.getDisplayMetrics());

    Resources applicationRes = getApplicationContext().getResources();
    Configuration applicationConf = applicationRes.getConfiguration();
    applicationConf.setLocale(newLocale);
    applicationRes.updateConfiguration(applicationConf, 
    applicationRes.getDisplayMetrics());
}

关于java - 如何更改 Android O/Oreo/api 26 应用程序语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47165311/

相关文章:

c++ - 具有不同语言环境的 std::wstring 中 ASCII 符号的字节表示

iPhone - 如何获取用户的日期格式

java - ConcurrentHashMap 的 Kotlin 并发

Android:如何检查 RecyclerView 的项目中是否选中了复选框

android - 仅图像选项的相机 Intent

android - 如何复制 Android AudioSource.MIC?

javascript - 如果提供弃用格式警告,MomentJS 使用语言环境

java - 获取所有唯一的子字符串

java - MongoTemplate 拉取查询

java - 如何在 Kafka Avro 生产者中发送对象的 ArrayList,而不为每个单独的记录调用 send 方法?