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.