赞
踩
更改语言后,新创建的活动将以更改后的新语言显示,但是当前活动和处于暂停状态的先前创建的活动不会更新。如何更新活动?
API 11之前的版本(蜂窝)是使现有活动以新语言显示的最简单方法是重新启动它。这样,您就不必费心自己重新加载每个资源。
private void restartActivity() {
Intent intent = getIntent();
finish();
startActivity(intent);
}
如果更改了语言首选项OnSharedPreferenceChangeListener,请在其中onShredPreferenceChanged()调用,注册一个restartActivity()。在我的示例中,只有PreferenceActivity重新启动,但是您应该能够通过设置一个标志来重新启动活动恢复上的其他活动。
更新(感谢@stackunderflow):从API 11(Honeycomb)开始,您应该使用recreate()而不是restartActivity()。
public class PreferenceActivity extends android.preference.PreferenceActivity implements
OnSharedPreferenceChangeListener {
// ...
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("pref_language")) {
((Application) getApplication()).setLocale();
restartActivity();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onStop() {
super.onStop();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
}
我有一个关于此主题的博客文章,其中有更多详细信息,但是它是中文的。完整的源代码在github上:PreferenceActivity.java
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。