В моем SettingsFragment
я хочу дать пользователю возможность выбора языка. Я создал строки. xml Файл поместил их в папку значений. Пользователи могут выбрать предпочтительный язык с помощью AlertDialog в SettingsFragment, и после выбора я сохранил выделение с помощью SharedPreferences и назвал его в классе приложения. В API 24 это работает хорошо, но в API 28 нет. Мои коды приведены ниже;
1 - switchLocal
метод в Utils
public static void switchLocal(Context context, String localCode, Activity activity) {
if (localCode.equalsIgnoreCase(""))
return;
Resources resources = context.getResources();
Locale locale = new Locale(localCode);
Locale.setDefault(locale);
android.content.res.Configuration config = new
android.content.res.Configuration();
config.locale = locale;
resources.updateConfiguration(config, resources.getDisplayMetrics());
//restart base activity
activity.finish();
activity.startActivity(activity.getIntent());
}
2 - SettingsFrament
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_settings, container, false);
layout_language = view.findViewById(R.id.layout_language);
layout_language.setOnClickListener(this);
SharedPreferences preferencesDil = requireActivity()
.getSharedPreferences(Constants.DIL_SHARED_PREF, Context.MODE_PRIVATE);
editorLanguage = preferencesDil.edit();
return view;
}
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
View view = requireActivity().getLayoutInflater().inflate(R.layout.set_language_layout, null);
builder.setView(view);
Button btn_english = view.findViewById(R.id.btn_english);
Button btn_german = view.findViewById(R.id.btn_german);
Button btn_french = view.findViewById(R.id.btn_french);
btn_english.setOnClickListener(v14 -> {
Utils.switchLocal(getActivity(), "en", getActivity());
editorLanguage.putString(Constants.DIL_SHARED_PREF, "en");
});
btn_german.setOnClickListener(v13 -> {
Utils.switchLocal(getActivity(), "de", getActivity());
editorLanguage.putString(Constants.DIL_SHARED_PREF, "de");
});
btn_french.setOnClickListener(v1 -> {
Utils.switchLocal(getActivity(), "fr", getActivity());
editorLanguage.putString(Constants.DIL_SHARED_PREF, "fr");
});
builder.setPositiveButton(R.string.iptal, null);
AlertDialog dialog = builder.create();
dialog.show();
}
3 - Класс приложения
SharedPreferences preferencesDil = getSharedPreferences(Constants.DIL_SHARED_PREF, Context.MODE_PRIVATE);
String language = preferencesDil.getString(Constants.DIL_SHARED_PREF, null);
if (language != null) {
Utils.switchLocal(getApplicationContext(), language, (Activity) getApplicationContext());
}