android determine if device is in right to left language/layout
Kotlin Code for detect app layout direction :
val config = resources.configuration
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (config.layoutDirection == View.LAYOUT_DIRECTION_LTR) {
// showAlertMsg("LTR")
} else {
// showAlertMsg( "RTL")
}
}
else {
//TODO("VERSION.SDK_INT < JELLY_BEAN_MR1")
}
Gr, a little bit longer googling and I would have found it before posting:
if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) {
// ...
}
else {
// ...
}
http://developer.android.com/reference/android/support/v4/view/ViewCompat.html#getLayoutDirection(android.view.View)
I think this is a better way:
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)
Or, if you have minAPI 17 or above, you can just use this:
val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR
Docs:
https://developer.android.com/reference/android/text/TextUtils.html#getLayoutDirectionFromLocale(java.util.Locale)
You could create a values-ldrtl folder with a xml file called isrighttoleft.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_right_to_left">true</bool>
</resources>
and in your values folder the same file with:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_right_to_left">false</bool>
</resources>
And finally in Code:
boolean isRightToLeft = getResources().getBoolean(R.bool.is_right_to_left);
The values-ldrtl will only be used on a device where the specific settings (e. g. Language) are right-to-left-read languages.