我有一个应用程序,用户可以在其中更改其语言。
一切正常,只需在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 Title仍然存在错误。
这是我的PrefenceActivity代码:
public class PreferencesActivity extends PreferenceActivity {
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
任何其他活动都不会发生此行为:/
无法锁定屏幕方向。
有什么想法吗?
感谢。
答案 0 :(得分:3)
好的,这为我修好了。
@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);
}
答案 1 :(得分:1)
我使用onConfigurationChanged()
解决了这个问题。
在这种方法中,我在Configuration对象中再次保存首选语言。
答案 2 :(得分:0)
当方向发生变化时,会调用OnCreate活动方法,因此您的代码会再次设置某些属性,查看on oncreate方法或锁定屏幕方向。
答案 3 :(得分:-1)
您可以使用
将屏幕方向锁定为您的活动android:screenOrientation="portrait"
或
android:screenOrientation="landscape"