Recursos y dirección de diseño representados incorrectamente solo en Android 8.0 y superior

Tengo una aplicación multilingüe con el idioma principal inglés y el idioma secundario árabe.

Estoy llamandosetLocale() en elonCreate() de cadaActivity en mi aplicación:

public static void setLocale(Locale locale){
    Locale.setDefault(locale);
    Context context = MyApplication.getInstance();
    final Resources resources = context.getResources();
    final Configuration config = resources.getConfiguration();
    config.setLocale(locale);
    context.getResources().updateConfiguration(config,
            resources.getDisplayMetrics());
}

dóndelocale es uno de los siguientes:

El método anterior se llamaantes d super.onCreate(savedInstanceState) recibe una llamada.

Como se describe endocumentació,

Yo he añadidoandroid:supportsRtl="true" en el manifiesto.He cambiado todas las propiedades xml conleft yright atributos astart yend respectivamente.He puesto cadenas en árabe enres\values-ar\strings carpeta y recursos extraíbles enres\drawable-ar carpeta (y de manera similar para otros recursos).

La configuración anterior funciona correctamente. Después de cambiar laLocale aar-AE, El texto y los recursos en árabe se muestran correctamente en mis Actividades.

Sin embargo, hay un problema con los recursos y la dirección de diseño para todos los dispositivos Android con la versión 8.0 y por encima

En un dispositivo con una versión inferior a 8.0, una pantalla RTLcorrectament Se ve como esto

Y en todos los dispositivos con 8.0+, la misma pantalla aparece así:

cual esincorrect.

esulta que tanto la dirección como los recursos se muestran incorrectamente.

Existendo problemas aquí:

Lo correctoLocale no parece estar actualizado en la configuración de la aplicación.a dirección del texto y los dibujos son opuestos a lo que debería ser.

Con respecto a la dirección, un método curioso llamadosetLayoutDirection() existe lo que no había notado antes.

Me gustaría saber cuál es este problema, por qué ocurre en Oreo y cuál es la solución. Por favor ayuda / comenta sobre esto.

EDITA:

De acuerdo con laAPI Informe de diferencias, elupdateConfiguration()e hecho, el método @ quedó en desuso en Android 7.1 (API nivel 25).

También, encontré todas las publicaciones relevantes sobre esto. En orden de importancia

1. Android N cambia el lenguaje mediante programación.

2. Android context.getResources.updateConfiguration () en desuso.

3. Cómo cambiar el idioma de la aplicación Android O / Oreo / api 26.

4. Problema de Android RTL en API 24 y superior en cambio de configuración regional

5. Cambiar el lenguaje mediante programación (Android N 7.0 - API 24).

6. Android N - Cambiar configuración regional en tiempo de ejecución.

7. RTL error de diseño en Android Oreo.