允许用户通过选项菜单更改语言

时间:2014-01-05 21:21:49

标签: android

我制作了一个简单的Android应用程序,现在我想添加选择语言的功能。 现在,应用程序根据设备的语言选择文件string.xml(包含在值-it-or-values -fr中)。但现在我希望您可以选择语言而不管设备的语言。 我在选项菜单中创建了项目,但我不知道要与语言case关联的操作。 代码如下:

public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.about:
            onCreateDialog(ABOUT_DIALOG_ID);
            break;
        case R.id.language:
            // ...
            break;
        case R.id.exit:
            this.finish();
            break;
    }   
    return true;
}   

我在网上搜索但几乎找不到任何东西..我希望我没有做过一个愚蠢的问题。 谢谢!

(对不起我的英语很差)

1 个答案:

答案 0 :(得分:0)

感谢您的回复。我是这样做的,但语言不会改变..

      public boolean onOptionsItemSelected(MenuItem item) {
            switch(item.getItemId()) {
                    case R.id.language: 
                            onCreateDialogLanguage(LANGUAGE_DIALOG_ID);                     
                    break;  
                    case R.id.about:
                            onCreateDialogAbout(ABOUT_DIALOG_ID);
                            break;
                    case R.id.exit:
                            this.finish();
                            break;
            }       
            return true;
    }

    protected Dialog onCreateDialogLanguage(int id) {
        AlertDialog languageDialog;
        switch(id) {        
                case LANGUAGE_DIALOG_ID:
                    final CharSequence[] items = {"English", "Italian"};
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setTitle("Select language");
                    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {
                        switch(item) {
                            case 0:
                            //english
                                    Configuration en = new Configuration(getResources().getConfiguration());
                                    en.locale = Locale.ENGLISH;
                                    getResources().updateConfiguration(en, getResources().getDisplayMetrics());
                            break;
                            case 1:
                            //italian
                                    Configuration it = new Configuration(getResources().getConfiguration());
                                    it.locale = Locale.ITALIAN;
                                    getResources().updateConfiguration(it, getResources().getDisplayMetrics());
                            break;
                        }                           
                        }
                    });
                    languageDialog = builder.create(); 
                    languageDialog.show();
                    break;      
                default:
                    languageDialog = null;
        }
        return languageDialog;
    }