Я создал настройки деятельности, где я хочу, чтобы пользователи изменили язык приложения внутри этого действия. Я создал все ресурсы для этих языков. Когда я захожу настройки деятельности и меняю язык, скажем, на русский язык, язык внутри этой деятельности меняется, и когда я возвращаюсь к основной деятельности, язык еще не изменяется. Чтобы изменить весь язык приложений, я должен обратиться к деятельности, чтобы применить все эти изменения. О активности имеет только панель инструментов.
Я создал настройки деятельности, где я хочу, чтобы пользователи изменили язык приложения внутри этого действия. Я создал все ресурсы для этих языков. Когда я захожу настройки деятельности и меняю язык, скажем, на русский язык, язык внутри этой деятельности меняется, и когда я возвращаюсь к основной деятельности, язык еще не изменяется. Чтобы изменить весь язык приложений, я должен обратиться к деятельности, чтобы применить все эти изменения. О активности имеет только панель инструментов.[code]import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.preference.PreferenceManager;
import java.util.Locale;
/** * This class is used to change your application locale and persist this change for the next time * that your app is going to be used. * * You can also change the locale of your application on the fly by using the setLocale method. * * Created by gunhansancar on 07/10/15. */ public class LocaleHelper {
private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";
public static Context onAttach(Context context) { String lang = getPersistedData(context, Locale.getDefault().getLanguage()); return setLocale(context, lang); }
public static Context onAttach(Context context, String defaultLanguage) { String lang = getPersistedData(context, defaultLanguage); return setLocale(context, lang); }
public static String getLanguage(Context context) { return getPersistedData(context, Locale.getDefault().getLanguage()); }
public static Context setLocale(Context context, String language) { persist(context, language);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return updateResources(context, language); }
return context; } } [/code] // Изменение языка приложений в настройках Activity [code] listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String selected = (String) newValue; Log.d("Selected", selected); if (selected.equals("0")) { saveToPrefs("en"); LocaleHelper.setLocale(SettingsPrefActivity.this, "en"); listPreference.setSummary("English"); listPreference.setValueIndex(0); recreate(); } else if (selected.equals("1")) { saveToPrefs("ru"); LocaleHelper.setLocale(SettingsPrefActivity.this, "ru"); listPreference.setSummary("Russia"); listPreference.setValueIndex(1); recreate(); } else if (selected.equals("2")) { saveToPrefs("uz"); LocaleHelper.setLocale(SettingsPrefActivity.this, "uz"); listPreference.setSummary("Uzbek"); listPreference.setValueIndex(2); recreate(); } return true; } });
@Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(LocaleHelper.onAttach(newBase)); } < /code> Основная деятельность Этот код вызовывает ранее на создании языка приложения изменения < /p> String languageCode = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("Language", "en"); if (languageCode.equals("1")) languageCode = "ru"; else if (languageCode.equals("2")) languageCode = "uz"; LocaleHelper.setLocale(TopActivity.this, languageCode);
< /code> также создал отдельный класс, который расширяет приложение и добавлено к манифестному имени приложения < /p> public Class Home Extends Application {< /p> @Override protected void attachBaseContext(Context base) { super.attachBaseContext(LocaleHelper.onAttach(base,"en")); } [/code] }