我必须在 Android 的运行时更改语言(是的,我知道这不是一个好的行为,但这是一个要求......)。
所以我有一个基础课,每个活动都从它延伸出来。该类具有以下功能:
public static void changeLanguage(Context context) {
Resources res = context.getResources();
/*
* Change locale settings in the app.
*/
DisplayMetrics dm = res.getDisplayMetrics();
/*
* Store and load data in this preferences
*/
android.content.res.Configuration conf = res.getConfiguration();
String[] localArray = res.getStringArray(R.array.language_short_array);
if (localArray != null) {
SharedPreferences settings = context.getSharedPreferences(
MyService.APP_ID, MODE_PRIVATE);
conf.locale = new Locale(localArray[settings.getInt(
PREFERED_LANGUAGE_KEY, 0)]);
res.updateConfiguration(conf, dm);
}
}
我会在 onCreate 中调用这个方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
changeLanguage(this);
}
这是在超类中。我的活动从它扩展并首先调用 super.onCreate。在这个调用之后,他们设置了他们的布局并初始化了他们的设置......
我认为我的代码行会成功。但我有以下问题:有时,活动会改变语言,有时不会!
如果我在它上面设置了一个调试断点,并且在程序暂停后我按下继续,一切正常。所以我认为,在某些情况下,我的应用程序“足够慢”,语言会正确改变,而如果应用程序太快,语言不会改变......
我的问题有什么解决办法吗?我如何确定我的语言会随时正确更改?
非常感谢!
编辑:这是一个从我的超类扩展的类的示例
public class MainMenuActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
}
}