Я написал многоязычное приложение.Почему андроид не распознает локаль как RTL при программном программировании?
У меня есть другая папка values
для разных языков, например values-fa
и values-ru
. Поскольку некоторые из этих языков, таких как фарси и арабский, RTL, я использовал другой дизайн макета, поместив другой макет .xml файлов в папку layout-ldrtl
рядом с основной папкой layout
.
Я также поместить файл с именем is_right_to_left.xml
ИНТ папку с именем values-ldrtl
, который определяет переменную как это:
<bool name="is_right_to_left">true</bool>
У меня есть один и тот же файл в папке values
и установите значение переменной в false
там.
Всякий раз, когда в коде мне нужно знать, я использую эту строку, чтобы понять, если текущая локаль является RTL один или нет:
isRightToLeft = context.getResources().getBoolean(R.bool.is_right_to_left);
Я тестировал приложение с различной конфигой устройства и все работает как очарование. Например, установка языка устройства на Farsi заставляет приложение читать строки с values-fa
и макеты с layout-ldrtl
, тогда как для арабского языка для устройства значения считаются с values-ar
, а макеты также считываются с layout-ldrtl
, потому что оба они являются языками RTL , Курс работает правильно и для языков LTR. Это то, что я хочу.
Проблема возникает, когда я устанавливаю локаль приложения программно. Это код, который я написал в onCreate()
методы из моих MainActivity
:
Locale myLocale = new Locale("fa");
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Теперь значения считываются правильно в соответствии с языком, но layout-ldrtl
и values-ldrtl
никогда не читали. Таким образом, приложение будет загружаться в LTR-дизайне из-за неправильного .xml файлов и неправильного значения isRightToLeft
переменной. Одно решение, которое я тестировал, помещает те файлы .xml в каждую папку языкового макета отдельно, и это работает. Но я надеюсь получить лучший и более быстрый способ решения проблемы. И, кроме того, почему андроид действует таким образом?
вам нужно сделать это программным способом, или вы просто тестирование приложения делать? Если это последнее, посмотрите http://lifehacker.com/enable-androids-secret-right-to-left-layout-if-youre-le-1676267178 – petey
@petey Мне нужно сделать это программно. Один случай - позволить пользователю выбрать язык приложения. Спасибо за ответ, хотя. – EmJiHash