可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Is there a way to determine if the device is in a right to left language (something like Arabic) as opposed to something that's left to right (English)?
Something compatible with older API levels (down to 10) is necessary
SOLUTION
i ended up using the xml method in the accepted answer. Farther down the line, i also added the code indicated here for instances where I didn't have access to getResources()
Identifying RTL language in Android
more info
This question still gets a lot of traffic; something else I wanted to point out: When I originally asked this I think it was partially to help address showing different pointing chevrons in RTL vs LTR -- another slick way of accomplishing this is by placing drawable resources in the standard and ldrtl
directories -- means no code required to determine which one to show!
回答1:
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.
回答2:
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)
回答3:
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)
回答4:
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")
}
回答5:
If this is still getting considerable traffic, people should also consider Configuration.getLayoutDirection(), for API 17+. It will return either LayoutDirection.LTR or LayoutDirection.RTL. I imagine ViewCompat.getLayoutDirection(android.view.View) returns the direction that was actually used to layout a particular view. If you're doing something weird, such as trying to determine which person should be on which side of a chat screen (like me), this might be of use.
回答6:
Yes,use the Bidi.getBaseLevel() function, it will return 0 for left-to-right and 1 for right to left.
http://developer.android.com/reference/java/text/Bidi.html#getBaseLevel()