Андроид определяет, находится ли устройство в праве на левый язык/макет
Есть ли способ определить, находится ли устройство в праве на левый язык (что-то вроде арабского), в отличие от того, что осталось справа (английский)?
Необходимо что-то, совместимое со старыми уровнями API (до 10)
Решение
i закончил использование метода xml в принятом ответе. Далее по строке я добавил код, указанный здесь, в случаях, когда у меня не было доступа к getResources()
Идентификация языка RTL в Android
больше информации
Этот вопрос по-прежнему получает много трафика; что-то еще, о чем я хотел бы указать: когда я изначально спросил об этом, я думаю, что частично было бы полезно обратиться с указанием различных указательных шевронов в RTL vs LTR - еще один способ сделать это - разместить доступные ресурсы в стандартных и ldrtl
каталогах - означает, что код не требуется для определения того, какой из них показывать!
Ответы
Ответ 1
Вы можете создать папку values-ldrtl с XML файлом с именем isrighttoleft.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_right_to_left">true</bool>
</resources>
и в папке значения тот же файл:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_right_to_left">false</bool>
</resources>
И, наконец, в Code:
boolean isRightToLeft = getResources().getBoolean(R.bool.is_right_to_left);
Значения-ldrtl будут использоваться только на устройстве, где конкретные настройки (например, язык) являются языками с правом налево.
Ответ 2
Gr, немного длиннее googling, и я бы нашел его перед публикацией:
if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) {
// ...
}
else {
// ...
}
http://developer.android.com/reference/android/support/v4/view/ViewCompat.html#getLayoutDirection(android.view.View)
Ответ 3
Я думаю, что это лучший способ:
val isLeftToRight = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR
Docs:
https://developer.android.com/reference/android/support/v4/text/TextUtilsCompat.html#getLayoutDirectionFromLocale(java.util.Locale)
Или, если у вас есть minAPI 17 или выше, вы можете просто использовать это:
val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR
Docs:
https://developer.android.com/reference/android/text/TextUtils.html#getLayoutDirectionFromLocale(java.util.Locale)
Ответ 4
Если это по-прежнему получает значительный трафик, люди также должны рассмотреть Configuration.getLayoutDirection() для API 17+. Он вернет либо LayoutDirection.LTR, либо LayoutDirection.RTL. Я полагаю, что ViewCompat.getLayoutDirection(android.view.View) возвращает направление, которое фактически использовалось для компоновки определенного вида. Если вы делаете что-то странное, например, пытаясь определить, какой человек должен быть на какой стороне экрана чата (например, я), это может быть полезно.
Ответ 5
Да, используйте функцию Bidi.getBaseLevel(), она вернет 0 слева направо и 1 справа налево.
http://developer.android.com/reference/java/text/Bidi.html#getBaseLevel()