所以在我的应用程序中,我正在改变主要活动的语言。
但是当我更改它时,子活动并没有完全转换,因为我在创建方法中命名了一些按钮。
当我不打开孩子的活动时,语言变化很有效,但是当我这样做并退回然后改变语言时,如果我重新打开子活动,它将不会通过onCreate并且不会完全翻译。
tl; dr:是否有办法(杀戮)完成所有孩子从父母到使用onCreate的强制活动。
答案 0 :(得分:1)
要完成当前活动,您可以使用:
this.finis();
要完成后台堆叠中的所有活动,您可以使用:
this.finishAffinity();
答案 1 :(得分:0)
尝试覆盖子类中的onStart方法:
@Override
protected void onStart() {
super.onStart();
//your onCreate code goes here
}
每次重新打开子活动时都会调用onStart方法
答案 2 :(得分:0)
我的问题最终是奥利奥。我使用了一个区域设置更改解决方案来更改我的应用程序的语言,它在oreo中不起作用。它完全适用于我的三星S4,但不适用于我的S9。
所以我正在进行这样的语言环境更改:
public void initAppLanguages(Context context, String lang){
PreferenceUtil.setSelectedLanguageId(lang);
LocaleUtils.setLocale(context, lang );
MyApplication.reouvrir=1;
Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
this.finishAffinity();
finish();
startActivity(i);
}
我的LocaleUtils类:
public class LocaleUtils {
@Retention(RetentionPolicy.SOURCE)
@StringDef({ENGLISH, FRENCH, SPANISH})
public @interface LocaleDef {
String[] SUPPORTED_LOCALES = {ENGLISH, FRENCH, SPANISH};
}
public static final String ENGLISH = "en";
public static final String FRENCH = "fr";
public static final String SPANISH = "es";
public static void initialize(Context context) {
setLocale(context, ENGLISH);
}
public static void initialize(Context context, @LocaleDef String defaultLanguage) {
setLocale(context, defaultLanguage);
}
public static boolean setLocale(Context context, @LocaleDef String language) {
return updateResources(context, language);
}
private static boolean updateResources(Context context, String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
context.createConfigurationContext(configuration);
configuration.locale = locale;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
return true;
}
}
我的PreferenceUtil类:
public class PreferenceUtil {
private static SharedPreferences getDefaultSharedPreference(Context context) {
if (PreferenceManager.getDefaultSharedPreferences(MyApplication.getInstance().getApplicationContext()) != null)
return PreferenceManager.getDefaultSharedPreferences(MyApplication.getInstance().getApplicationContext());
else
return null;
}
public static void setSelectedLanguageId(String id){
final SharedPreferences prefs = getDefaultSharedPreference(MyApplication.getInstance().getApplicationContext());
SharedPreferences.Editor editor = prefs.edit();
editor.putString("app_language_id", id);
editor.apply();
}
public static String getSelectedLanguageId(){
return getDefaultSharedPreference(MyApplication.getInstance().getApplicationContext())
.getString("app_language_id", "en");
}
}
这样的子活动中的语言环境会发生变化:
MyApplication.initAppLanguage(mContext);
我做错了什么?为什么它不在奥利奥工作?