我曾经在应用中更改语言 通过执行以下操作:
Configuration cfg = new Configuration();
if (!TextUtils.isEmpty(lang))
cfg.locale = new Locale(lang);
else
cfg.locale = Locale.getDefault();
Resources resources = ctx.getResources();
resources.updateConfiguration(cfg, resources.getDisplayMetrics());
然后重新启动活动:
Intent intent = new Intent(context, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
这种方式在我从'com.android.support:appcompat-v7:23.1.1'
至'com.android.support:appcompat-v7:23.2.1'
除非我杀死应用程序,否则资源不会改变
我写了一个示例here来演示通过警报管理器重启应用程序的虚拟解决方案的问题,但我相信我可能做错了什么或者我错过了发布说明{{ 3}}
我搜索了很多,但我还没有发现任何关于这个问题的信息, 我在here
中提到了与资源相关的唯一新问题关于新的机器人N,它说:
如果您是那些在您的应用中覆盖用户设备区域设置的开发人员之一...请在N上进行彻底测试。
然而我的问题是棒棒糖,kitkat和果冻豆
答案 0 :(得分:2)
下面的代码对我来说很好。 我在preferance中存储语言并使用以下代码我可以用多种语言制作应用程序。
Locale locale;
switch (userPreference.language)
{
default:
case 0:
locale = new Locale("de");
languageCode = "de-de";
break;
case 1:
locale = new Locale("en");
languageCode = "en-en";
break;
case 2:
locale = new Locale("fr");
languageCode = "fr-fr";
break;
case 3:
locale = new Locale("pl");
languageCode = "pl-pl";
break;
}
Configuration config = getResources().getConfiguration();
Locale.setDefault(locale);
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
请查看我的活动代码
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
UserPreference userPreference = PreferenceHelper.getUserPreference(context);
switch (userPreference.language)
{
case 0:
GenericHelper.changeLanguage(context, "de");
break;
case 1:
GenericHelper.changeLanguage(context, "en");
break;
case 2:
GenericHelper.changeLanguage(context, "fr");
break;
case 3:
GenericHelper.changeLanguage(context, "pl");
break;
}
setContentView(R.layout.activity_get_signature);