¿Cómo cambiar el idioma de la aplicación cuando el usuario selecciona el idioma?

Quiero que mi aplicación admita tres idiomas español, portugués e inglés. Y dar la opción de seleccionar el idioma en la aplicación. He hecho

1) 3 carpetas dibujables drawable-es, drawable-pt, drawable.

2) 3 valores de carpeta valores-es, valores-pt, valores. Cambiar valores de String.xml según los idiomas.

Tengo imageView para seleccionar el idioma. Cuando haga clic en él, se abrirá el menú que consiste en la opción inglés, español, portugués.

Establecí Locale dentro de la aplicación en la opción de selección 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);
}

He declarado en manifiestoandroid: configChanges = "locale"

Funciona pero tiene algún problema.

Problema:-

1) Cuando se selecciona el idioma, la pantalla que consiste en la imagen de la selección de idioma no cambia, pero otras pantallas cambian.

2) Después del cambio de orientación, la aplicación restablece el idioma según la configuración regional del teléfono.

Respuestas a la pregunta(6)

Su respuesta a la pregunta