как заставить остаться на последнем языке, когда приложение для Android закрыто? - PullRequest
0 голосов
/ 27 июня 2018

Я уже сделал приложение для Android, чтобы сменить язык. Но когда приложение закрывается и снова открывается, язык возвращается к языку по умолчанию. Как сделать, чтобы приложение снова открылось и язык был последним выбранным пользователем?

Спасибо за помощь, и я действительно ценю это.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

По умолчанию язык приложения будет возвращаться к локали устройства, поэтому при каждом перезапуске приложения язык будет меняться.

Чтобы язык вашего приложения соответствовал выбранному пользователем предпочтению, вам нужно сохранить язык, выбранный пользователем. Одним из способов является сохранение языковых настроек в SharedPreference. Когда приложение запущено, проверьте значение в настройках, чтобы решить, какой язык следует использовать, а затем соответствующим образом скорректируйте вид.

Вы можете сделать это следующим образом

Сохранить значение следующим образом при смене языка:

SharedPreferences.Editor editor = getSharedPreferences ("MyPref", MODE_PRIVATE) .edit (); editor.putString ("language", "en"); editor.commit ();

Получить значение следующим образом в onCreate():

SharedPreferences prefs = getSharedPreferences("MyPref", MODE_PRIVATE); 
String selectedLanguage = prefs.getString("language", "<enter default locale of app>");
setLocale(selectedLanguage);

В конечном итоге установить язык следующим образом:

Без перезапуска активности:

Установите android:configChanges="locale" в вашем манифесте

Измените setLocale следующим образом:

private void setLocale(String lang) {
    Locale myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);
    getBaseContext().getResources().updateConfiguration(conf, getBaseContext().getResources().getDisplayMetrics());
    invalidateOptionsMenu();
    onConfigurationChanged(conf);//Add this line
}

Переопределить onConfigurationChanged ():

@Override
public void onConfigurationChanged(final Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    textView.setText(<your-text>);
    //Any other UI text to change
}

В качестве альтернативы вы можете позвонить recreate(); после изменения локали. Это обеспечит правильное изменение вашей локали.

0 голосов
/ 27 июня 2018

вам нужно сохранить выбранный пользователем язык в общем предпочтении или любом другом постоянном хранилище, при следующем запуске приложения восстановить ранее выбранный язык и применить его к приложению.

когда пользователь меняет язык, чтобы применить новое языковое действие, оно должно быть завершено и перезапущено , иначе вам нужно вызвать пересоздать () метод действия.

https://github.com/gunhansancar/ChangeLanguageExample/blob/master/app/src/main/java/com/gunhansancar/changelanguageexample/helper/LocaleHelper.java

Скопируйте вышеуказанный класс в свой код.

В своей деятельности отмените приведенный ниже метод.

 @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(LocaleHelper.onAttach(base));
    }

Когда пользователь меняет язык, например, при нажатии кнопки. сохранить язык, используя код ниже Здесь en - код языка (iso) для английского языка.

@Override
    public void onClick(View v) {
     LocaleHelper.persist(context,"en");
     recreate();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...