Я знаю, что есть много дискуссий на эту тему, и я сделал свою домашнюю работу и ранее прочитал много сообщений stackoverflow, но ни один из них, кажется, не решил мою проблему.
У меня есть функция setLocale, которая запускается накаждое действие onCreate (не уверен, что это лучший способ сделать это, но это то, как я это делаю прямо сейчас) и setLocale создает и возвращает новый контекст с примененной настройкой пользовательской локали, и это работает (когда вы вызываете getString текст вправильный язык возвращается), но дело в том, что этот новый контекст (context = context.createConfigurationContext (config) в setLocale) имеет тип ContextImpl? , и я ожидаю, что это будет Activity, которая называетсяsetLocale, потому что я затем запускаю методы, которым нужно действие в контексте (контекст типа деятельности), но так как оно ContextImpl, я получаю «Невозможно привести android.app.ContextImpl к Activity».Это понятно?Любая помощь?
Спасибо.
public static Context setLocale(Context context, String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Resources res = context.getResources();
Configuration config = new Configuration(res.getConfiguration());
if (Build.VERSION.SDK_INT >= 17) {
config.setLocale(locale);
context = context.createConfigurationContext(config);
} else {
config.locale = locale;
res.updateConfiguration(config, res.getDisplayMetrics());
}
return context;
}
Редактировать 1: Один хороший подход.
Если я вставлю следующий фрагмент кода в свою деятельность SplashScreen:
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
Тогда языковой стандарт работает вместе со всем приложением, но я знаю, UpdateConfiguration устарела , и я пытаюсь использовать новый формат, который может быть:
public static Context updateResources(Context context, String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Resources res = context.getResources();
Configuration config = new Configuration(res.getConfiguration());
if (Build.VERSION.SDK_INT <= 17) {
config.setLocale(locale);
context = context.createConfigurationContext(config);
} else {
config.locale = locale;
res.updateConfiguration(config, res.getDisplayMetrics());
}
return context;
}
Но сэтот второй обновленный подход не работает, какие-либо предложения?