J'ai une application multilingue dont la langue principale est l'anglais et la langue secondaire l'arabe.
Comme décrit dans le documentation ,
- J'ai ajouté
android:supportsRtl="true"
dans le manifeste. - J'ai changé toutes les propriétés xml avec
left
etright
attributs àstart
etend
respectivement. - J'ai ajouté des chaînes de langue arabe dans
strings-ar
(et de même pour les autres ressources).
La configuration ci-dessus fonctionne correctement. Après avoir modifié le Locale
à ar-AE
Le texte et les ressources en arabe s'affichent correctement dans mes activités.
Cependant, chaque fois que je navigue vers un
Activity
avec unWebView
et/ou unWebViewClient
la locale, le texte et la direction de la mise en page reviennent brusquement à la valeur par défaut du périphérique.
D'autres indices :
- Cela se produit uniquement sur un Nexus 6P avec Android 7.0 . Tout fonctionne correctement sur Android 6.0.1 et inférieur.
- Le changement brusque de lieu se produit uniquement lorsque je navigue vers un
Activity
qui a unWebView
et/ou unWebViewClient
(et j'en ai plusieurs). Il ne se produit sur aucune des autres activités.
Android 7.0 prend en charge les paramètres régionaux multiples, ce qui permet à l'utilisateur de définir plusieurs paramètres régionaux par défaut. Ainsi, si je définis la locale principale à Locale.UK
:
Ensuite, en naviguant vers le
WebView
la locale passe dear-AE
àen-GB
.
Modifications de l'API d'Android 7.0 :
Comme indiqué dans le liste des changements d'API Dans l'API 24, de nouvelles méthodes relatives aux paramètres linguistiques ont été ajoutées aux classes suivantes :
Locale
:
Configuration
:
Cependant, je construis mon application avec l'API 23 et je n'utilise aucune de ces nouvelles méthodes. ces nouvelles méthodes.
En outre...
-
Le problème se produit également sur l'émulateur Nexus 6P.
-
Pour obtenir la locale par défaut, j'utilise
Locale.getDefault()
. -
Pour définir la locale par défaut, j'utilise le code suivant :
public static void setLocale(Locale locale){ Locale.setDefault(locale); Configuration config = new Configuration(); config.setLocale(locale); Context context = MyApplication.getInstance(); context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); }
Quelqu'un a-t-il déjà rencontré ce problème ? Quelle en est la raison et comment puis-je le résoudre ?
Références :
1. Support RTL natif dans Android 4.2 .
1 votes
honnêtement, ça ressemble à un bug de leur part. Avez-vous vérifié le bug track d'Android ?
0 votes
Pouvez-vous afficher le
onCreate
(ou autre code pertinent) de l'activité qui gonfle ou instancie le webview ?0 votes
Monsieur, j'ai un problème similaire dans mon application et cette méthode ne fonctionne pas, pouvez-vous s'il vous plaît voir ma question et voir ce qui peut être le problème ? stackoverflow.com/questions/42105938/