我正在开发一个项目以在应用程序中即时更改语言环境。主 UI 是在 res/layout/main.xml 中创建的。这是我的代码:
OnCreate()
{
... ...
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = Locale.FRANCE; // set locale to french
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.main);
}
结果:main.xml 中的 android:text="@string/myString" 正在 res/values-fr/strings.xml 中使用 myString,这正是我的预期。
在语言环境更改为意大利语的另一个函数中:
{ ... ...
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = Locale.ITALY; // change locale to Italian
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
在调用该函数之后, getString(R.string.myString) 正在 res/values-it/strings.xml 中使用 myString,这正是我所期望的。但是,主 UI 不会改变。main.xml 中的 android:text="@string/myString" 仍在 res/values-fr/strings.xml 中使用 myString,直到我强制 Activity 重新启动:
{
Intent intent = getIntent();
finish();
startActivity(intent);
}
我试图调用 view.invalidate() 和 layoutInflater.inflate(R.layout.main, this) 但它们都不起作用。任何想法/建议将不胜感激。