Android - 更改区域设置(语言)

时间:2015-05-27 10:23:51

标签: android locale

我正在尝试添加语言控制器,这意味着更改应用的语言。

我添加了4个标记(ImageView),每当我按下我想要的标记时,我希望应用程序更改依赖于该标记的语言。

Main Menu

应用程序开始是英语,当我按下丹麦语时,语言会切换到丹麦语,但每当我想改回英语时,都没有任何反应。

我在自己的值文件夹

中创建了几个strings.xml文件
yourtype

更改语言的方法:

value-en/strings.xml
value-dk/strings.xml

english.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Locale locale = new Locale("en"); Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getResources().updateConfiguration(config,getResources().getDisplayMetrics()); setContentView(R.layout.activity_main); } }); 是我对ImageView的变量

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。

为了将onClickListener()保存在我的其他组件上,我需要刷新下面发布的活动:

重新开始活动

我只是制作了如下方法:

//Restarts the activity after changing the languagse
private void RestartActivity(){
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}

每当我更改语言时,我都会运行方法:

english.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Locale locale = new Locale("en");
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getResources().updateConfiguration(config,getResources().getDisplayMetrics());
        setContentView(R.layout.activity_main);
        RestartActivity(); //Run the method as the last thing
    }
});

由于某种原因,听众并没有看到mto留下来,但这个解决方案适合我。

答案 1 :(得分:0)

我测试了下面的代码,它按照我的考虑工作。检查一下它会对你有所帮助。 在您的单击侦听器上调用此方法,并将区域设置字符串作为参数传递。

private void setDeviceDefaultLanguage(String languageToLoad){

    Locale locale = new Locale(languageToLoad);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getResources().updateConfiguration(config,
            getResources().getDisplayMetrics());
    Intent i = getBaseContext().getPackageManager()
            .getLaunchIntentForPackage(getBaseContext().getPackageName());
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
}