其他分享
首页 > 其他分享> > 方向更改时,为什么在PreferenceActivity上覆盖区域设置?

方向更改时,为什么在PreferenceActivity上覆盖区域设置?

作者:互联网

我有一个应用程序,用户可以在其中更改其语言.

一切正常,仅在MainActivity.onCreate()上使用以下代码:

String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("languagePref", "default");
    Configuration config = getResources().getConfiguration();
    if( lang.equals("default") ) lang = Locale.getDefault().getLanguage();
    config.locale = new Locale(lang);
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());

重新启动应用程序或浏览活动时,它仍然是正确的语言.

唯一的问题是在PreferenceActivity屏幕上.方向更改时,PreferenceActivity标题(以及仅此标题)将更改为默认设备语言.

偏好仍然可以正确检查,如果我返回(关闭PreferenceActivity),该应用仍使用正确的语言,但在重新启动该应用之前,PreferenceActivity仍然是错误的.

我尝试在PreferenceActivity.onCreate()上强行使用上面的代码,尽管调试似乎还可以,但PrefenceActivity标题仍然错误.

这是我的PrefenceActivity代码:

public class PreferencesActivity extends PreferenceActivity {

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

此行为不会发生在任何其他Activity上:/

锁定屏幕方向不是一种选择.

有什么想法吗?

谢谢.

解决方法:

好的,这已为我修复.

@Override
protected void onSaveInstanceState(Bundle outState) {
    String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("languagePref", "default");
    Configuration config = getResources().getConfiguration();
    if( lang.equals("default") ) lang = Locale.getDefault().getLanguage();
    config.locale = new Locale(lang);
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());
    super.onSaveInstanceState(outState);
}

标签:preferenceactivity,android,localization
来源: https://codeday.me/bug/20191122/2060339.html