Android - язык WebView резко меняется на Android N
У меня есть многоязычное приложение с основным языком английский и дополнительный язык арабский.
Как описано вдокументация,
я добавилandroid:supportsRtl="true"
в манифесте.Я изменил все свойства XML сleft
а такжеright
приписываетstart
а такжеend
соответственно.Я добавил строки на арабском языке вstrings-ar
(и аналогично для других ресурсов).Вышеуказанная настройка работает правильно. После измененияLocale
вar-AE
, Арабский текст и ресурсы правильно отображаются в моей деятельности.
Тем не менее, каждый раз, когда я перехожу кActivity
сWe,bView
и / илиWebViewClient
, язык, текст и направление макета внезапно возвращаются к устройству по умолчанию.
Дальнейшие подсказки:
Это происходиттолько на Nexus 6P сAndroid 7.0, Все работает правильно на Android 6.0.1 и ниже.Резкий сдвиг в локали происходиттолько когда я перейду кActivity
это имеетWebView
и / илиWebViewClient
(а у меня их несколько). Это не происходит ни на одном из других видов деятельности.Android 7.0 имеет поддержку нескольких локалей, что позволяет пользователю установить более одной локали по умолчанию. Так что, если я установлю основной языкLocale.UK
:
Затем при переходе кWebView
, язык меняется отar-AE
вen-GB
.
Изменения API Android 7.0:
Как указано всписок изменений APIновые методы, относящиеся к локали, были добавлены в следующие классы в API 24:
Locale
:
Locale.getDefault(...)
Locale.setDefault(...)
Configuration
:
getLocales()
setLocales(...)
Однако я создаю свое приложение с API 23 и не использую ни один из этих новых методов.
Более того ...
Проблема возникает и на эмуляторе Nexus 6P.
Чтобы получить локаль по умолчанию, я используюLocale.getDefault()
.
Чтобы установить язык по умолчанию, я использую следующий код:
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());
}
Кто-нибудь сталкивался с этой проблемой раньше? В чем причина, и как мне это решить?
Рекомендации:
1. Встроенная поддержка RTL в Android 4.2.