Como mudar o idioma do aplicativo quando o usuário seleciona o idioma?

Quero que meu aplicativo suporte três idiomas: espanhol, português e inglês. E dê a opção de selecionar o idioma em app.I fizeram

1) 3 pastas desenhados drawable-es, drawable-pt, drawable.

2) Valores de pasta de 3 valores-es, valores-pt, valores. Altera valores de String.xml de acordo com os idiomas.

Eu tenho imageView para selecionar o idioma.Quando clicar em menu aberto que consiste opção Inglês, Espanhol, Português.

Eu defino Locale dentro do aplicativo na seleção de opções por este código

public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.en:
             Locale locale = new Locale("en"); 
             Locale.setDefault(locale);
             Configuration config = new Configuration();
             config.locale = locale;
             getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
             Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
             break;

        case R.id.pt:
             Locale locale2 = new Locale("pt"); 
             Locale.setDefault(locale2);
             Configuration config2 = new Configuration();
             config2.locale = locale2;
             getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
             break;

        case R.id.es:
             Locale locale3 = new Locale("es"); 
             Locale.setDefault(locale3);
             Configuration config3 = new Configuration();
             config3.locale = locale3;
             getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
             break;


    }
         return super.onOptionsItemSelected(item);
}

Eu declarei em Manifestoandroid: configChanges = "locale"

Funciona, mas tem algum problema.

Problema:-

1) Quando o idioma selecionado, tela que consiste imagem de seleção de idioma não muda, mas outras telas são alteradas.

2) Após a mudança de orientação, o aplicativo restaurará o idioma de acordo com a localidade do telefone.

questionAnswers(6)

yourAnswerToTheQuestion