我的应用程序用户可以从应用程序的设置中更改语言。是否可以在不影响常规语言设置的情况下更改应用程序内的语言?
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

10-08 03:08