我的应用程序用户可以从应用程序的设置中更改语言。是否可以在不影响常规语言设置的情况下更改应用程序内的语言?
This question of stackoverflow对我非常有用,我已经尝试过了。更改语言后,新创建的 Activity 将以更改的新语言显示,但是当前 Activity 和处于暂停状态的先前创建的 Activity 不会更新。如何更新 Activity ?
我也花了很多时间试图使首选项更改立即生效,但没有成功。重新启动应用程序后,将再次创建所有 Activity ,因此现在语言已正确更改。
android:configChanges="locale"
还为所有 Activity 添加了 list 。并且还支持所有屏幕。
目前,我尚未在activity的onResume()方法中做任何事情。
有什么方法可以刷新或更新 Activity (没有完成并重新开始)?我是否缺少在onResume()方法中要做的事情?
最佳答案
API 11之前的版本(蜂窝)是使现有 Activity 以新语言显示的最简单方法是重新启动它。这样,您就不必费心自己重新加载每个资源。
private void restartActivity() {
Intent intent = getIntent();
finish();
startActivity(intent);
}
如果更改了语言首选项,请在其
OnSharedPreferenceChangeListener
中注册一个onShredPreferenceChanged()
,以调用restartActivity()
。在我的示例中,只有PreferenceActivity重新启动,但是您应该能够通过设置一个标志来重新启动 Activity 恢复上的其他 Activity 。更新(感谢@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);
}
}
我有一个关于该主题的post博客,更详细,但它是中文的。完整的源代码在github上:PreferenceActivity.java