【问题标题】:Android - App locale changes and displayed orientationAndroid - 应用程序区域设置更改和显示方向
【发布时间】:2013-04-24 04:38:12
【问题描述】:

我对我的应用程序中的语言环境感到头疼。所以基本上我的应用程序支持两种语言,英语和越南语,用户可以选择更改要显示的语言。所以我有一个像这样的SettingActivity

public class SettingsActivity extends SherlockPreferenceActivity implements OnPreferenceChangeListener{
    private ListPreference langPref;
    private SharedPreferences languagepref;
    private String language;
    private Locale locale;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    languagepref = PreferenceManager.getDefaultSharedPreferences(this);               
    Configuration config = getBaseContext().getResources().getConfiguration();
    language = languagepref.getString("languageToLoad","en");
    locale = new Locale(language);
    Locale.setDefault(locale);
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

    addPreferencesFromResource(R.xml.preferences_login);

    langPref = (ListPreference) findPreference("lang_pref");
    if (language.equalsIgnoreCase("vi")){
        langPref.setValueIndex(1);
    }
    else{
        langPref.setValueIndex(0);
    }
    langPref.setOnPreferenceChangeListener(this);
}


@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    String key = preference.getKey();
    if (key.equals("lang_pref")){
        String languageToLoad  = (String) newValue;
        Locale locale = new Locale(languageToLoad);  
        Locale.setDefault(locale); 
        Configuration config = new Configuration(); 
        config.locale = locale; 
        getBaseContext().getResources().updateConfiguration(config,  
        getBaseContext().getResources().getDisplayMetrics());

        SharedPreferences.Editor editor = languagepref.edit();
        editor.putString("languageToLoad",languageToLoad );
        editor.commit();
        recreate();     
    }
    return false;
}
}

在所有其他活动中,我将其添加到他们的 onCreate 方法中:

SharedPreferences languagepref = PreferenceManager.getDefaultSharedPreferences(this);               
        Configuration config = getBaseContext().getResources().getConfiguration();
        String language = languagepref.getString("languageToLoad","en");
        Locale locale = new Locale(language);
        Locale.setDefault(locale);
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

现在我的应用程序表现得很奇怪:在SettingActivity 中,只要我旋转我的设备,语言就会正确显示,即使不需要在活动清单中添加android:configChanges="locale"。但是,在所有其他活动中,当我旋转设备时,语言会改回英语。我尝试在他们的清单中添加android:configChanges="locale",但它不起作用。另外,我已经尝试了在 Stackoverflow 上找到的所有解决方案,但它们都不适合我,所以我现在基本上一无所知。你们中的任何人都可以帮我指出我在这里犯的错误吗?请提前谢谢。

【问题讨论】:

标签: android configuration locale sharedpreferences android-orientation


【解决方案1】:

尝试添加

android:configChanges="orientation|keyboard|keyboardHidden" 

在每个活动的清单中。

然后您应该在您的活动中覆盖 onConfigurationChanged,并在此方法中重新加载布局(取决于方向)。如果您仍然有语言环境问题,请在 onConfigurationChanged 中重新加载适当的语言环境。

【讨论】:

  • 很抱歉,您所说的“重新加载布局”具体是什么意思?
  • 如果您对横向和纵向使用不同的 xml 布局,当方向更改时,您必须更改活动的布局(例如使用 setContentView)。如果您使用 sam 布局,请忽略这一点,并专注于您的“语言环境”问题。
猜你喜欢
  • 2023-04-02
  • 2019-03-22
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多