仅更改当前活动的android区域设置

仅更改当前活动的android区域设置,android,forms,locale,Android,Forms,Locale,是否有方法仅针对当前的活动,在Android应用程序中更改区域设置 我在活动中有一个表单,我想添加一个选项,供用户选择填写表单的语言。因此,在同一活动中可以选择语言 此选项应随时可用,当选择新语言时,应保留表单信息。这样就可以在填写表格时完成 Locale locale = new Locale("fi"); Locale.setDefault(locale); Configuration config = context.getResources().getConfig

是否有方法仅针对当前的
活动
,在
Android
应用程序中更改
区域设置

我在
活动
中有一个
表单
,我想添加一个选项,供用户选择填写表单的语言。因此,在同一活动中可以选择语言

此选项应随时可用,当选择新语言时,应保留表单信息。这样就可以在填写表格时完成

    Locale locale = new Locale("fi");
    Locale.setDefault(locale);
    Configuration config = context.getResources().getConfiguration();
    config.locale = locale;
    context.getResources().updateConfiguration(config,
            context.getResources().getDisplayMetrics());
我偶然发现了这个解决方案,它改变了整个应用程序语言,但在当前的
活动中不会改变,除非重新加载它。在重新加载活动时,
表单数据
丢失

我想我可以将表单信息保存在
包中,然后在选择新语言时从那里重新加载,但是有更好的方法吗

编辑

我在
控制器中显示
表单
,因此更改
区域设置
,然后
重新创建
活动实际上不是一个选项,因为它会让屏幕空白约1-2秒

有没有更好的办法?也许有办法只重新加载文本字段

我能想到一个主意那就是。。在应用程序中更改语言时重写所有文本字段,但这真的是一个好的解决方案吗

@OnClick(R.id.btnLocaleEng)
public void onLocaleChangedEng(){
    Locale english = new Locale("en", "US");
    Resources resources = getLocalizedResources(context, english);
    title.setText(resources.getString(R.string.title));
    ...
}

@OnClick(R.id.btnLocaleFi)
public void onLocaleChangedFi(){
    Locale english = new Locale("fi", "FI");
    Resources resources = getLocalizedResources(context, english);
    title.setText(resources.getString(R.string.title));
    ...
}

@NonNull
public Resources getLocalizedResources(Context context, Locale desiredLocale) {
    Configuration conf = context.getResources().getConfiguration();
    conf = new Configuration(conf);
    conf.setLocale(desiredLocale);
    Context localizedContext = context.createConfigurationContext(conf);
    return localizedContext.getResources();
}
基本上这样做,因为我有30多个领域,我将需要做他们一个接一个。
很难相信没有其他选择。

您必须通过重新创建活动来更新配置。另一方面,表单数据不会在配置更改中持久化,这是可以使用
savedInstansteState
处理的。但使用当前的SOUTION,它将更改整个应用程序的语言,而不仅仅是所选的
活动