我在选项更改后强制使用语言环境:
public void forceLocale(Context ctx) {
Locale.setDefault(getCurrentLocale());
Configuration config = new Configuration();
config.locale = getCurrentLocale();
ctx.getResources().updateConfiguration(config, ctx.getResources().getDisplayMetrics());
}
我希望当前活动显示在新的Locale中,但它不会发生。其他活动也是如此。
我在onResume()上尝试了无效的所有活动:
protected void onResume() {
//if no custom locale, restore default
if (StaticClass.locale.getCurrentLocale() == null)
StaticClass.locale.restoreDefaultLocale();
//force curretnt locale
StaticClass.locale.forceLocale(this);
//reload the view
ViewGroup vg = (ViewGroup) findViewById(android.R.id.content);
vg.invalidate();
super.onResume();
}
没效果。应用程序在从内存中消失并重新启动后会被翻译
答案 0 :(得分:0)
您是否在清单android:configChanges="locale"
中设置了区域设置属性?我还在每个活动的onCreate()
中添加了此内容
if (Globals.langConfig != null)
this.onConfigurationChanged(Globals.langConfig);
然后我覆盖每个活动中的onConfigurationChanged()
@Override
public void onConfigurationChanged(Configuration newConfig) {
newConfig = Globals.getUserLanguage(this);
super.onConfigurationChanged(newConfig);
这可能不是最好的方式,但现在对我有用。如果你还没有,我认为覆盖onConfigurationChanged()
方法可能是你最大的问题