仅更改当前活动的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,它将更改整个应用程序的语言,而不仅仅是所选的活动