Android:以编程方式更改语言

时间:2012-05-22 12:16:28

标签: android button locale onclicklistener

我有3个按钮来改变语言。所以我需要创建方法,我可以将监听器设置为按钮,这些按钮可以在每次按下时更改语言。 我尝试了这个https://stackoverflow.com/a/2900144/1088229,但这样它只改变了一次语言环境,似乎这不再起作用了(如果我再次点击,它甚至没有响应)。所以我在监听器的末尾添加了changeLanguageListener(),这样就可以刷新监听器。

没关系,我是如何解决它还是有另一种方式?

private void changeLanguageListener() {
    final Button butEn = (Button) findViewById(R.id.button_language_en);
    final Button butLt = (Button) findViewById(R.id.button_language_lt);
    final Button butRu = (Button) findViewById(R.id.button_language_ru);
    OnClickListener listener = new OnClickListener() {

        public void onClick(View v) {
            Button but = (Button) v;
            Resources res = getResources();
            String current = res.getConfiguration().locale.getCountry();
            Log.i("Current", current);
            String localeString = new String(current);
            if (but.equals(butEn)) {
                localeString = "en";
            } else if (but.equals(butLt)) {
                localeString = "lt";
            } else if (but.equals(butRu)) {
                localeString = "ru";
            }
            Log.i("Clicked", localeString);

            if (!current.equalsIgnoreCase(localeString) && localeString.length() > 0) {
                // Change locale settings in the app.
                DisplayMetrics dm = res.getDisplayMetrics();
                android.content.res.Configuration conf = res.getConfiguration();
                conf.locale = new Locale(localeString.toLowerCase());
                res.updateConfiguration(conf, dm);  
                //refresh menu
                setGridView();
                //added this line to get refreshed listener
                changeLanguageListener();
            }               
        }
    };
    butEn.setOnClickListener(listener);
    butLt.setOnClickListener(listener);
    butRu.setOnClickListener(listener);
}

3 个答案:

答案 0 :(得分:2)

因此,由于我只允许更改区域设置的两个活动(两个菜单模式),我只是在区域设置更改后立即重新启动Activity,因此所有内容都会刷新。没有找到任何其他更好的解决方案

答案 1 :(得分:2)

Resources res = context.getResources();
// Change locale settings in the app.

DisplayMetrics dm = res.getDisplayMetrics();

android.content.res.Configuration conf = res.getConfiguration();

conf.locale = new Locale(language_code.toLowerCase());
res.updateConfiguration(conf, dm);

如果您有特定于语言的内容 - 您可以根据设置更改该基础。##标题##

答案 2 :(得分:1)

我不建议您更改应用程序中的语言。更好的解决方案是打开系统区域设置的按钮。您可以使用以下意图。

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCALE, 0);

有关区域设置的详细信息: http://developer.android.com/reference/android/provider/Settings.html#ACTION_LOCALE_SETTINGS