Skip to content Skip to sidebar Skip to footer

Identifying Rtl Language In Android

Is there a way to identify RTL (right-to-left) language, apart from testing language code against all RTL languages? Since API 17+ allows several resources for RTL and LTR, I assum

Solution 1:

Get it from Configuration.getLayoutDirection():

Configurationconfig= getResources().getConfiguration();
if(config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
    //in Right To Left layout
}

Solution 2:

@cyanide's answer has the right approach but a critical bug.

Character.getDirectionality returns the Bi-directional (bidi) character type. Left-to-right text is a predictable type L and right-to-left is also predictably type R. BUT, Arabic text returns another type, type AL.

I added a check for both type R and type AL and then manually tested every RTL language Android comes with: Hebrew (Israel), Arabic (Egypt), and Arabic (Israel).

As you can see, this leaves out other right-to-left languages, so I was concerned that as Android adds these languages, there might have a similar issue and one might not notice right away.

So I tested manually each RTL language.

  • Arabic (العربية) = type AL
  • Kurdish (کوردی) = type AL
  • Farsi (فارسی) = type AL
  • Urdu (اردو) = type AL
  • Hebrew (עברית) = type R
  • Yiddish (ייִדיש) = type R

So it looks like this should work great:

publicstaticbooleanisRTL() {
    return isRTL(Locale.getDefault());
}

publicstaticbooleanisRTL(Locale locale) {
    finalintdirectionality= Character.getDirectionality(locale.getDisplayName().charAt(0));
    returndirectionality== Character.DIRECTIONALITY_RIGHT_TO_LEFT ||
           directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC;
}

Thanks @cyanide for sending me the right direction!

Solution 3:

If you're using the support library, you can do the following:

if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_RTL) {
    // The view has RTL layout
} else {
    // The view has LTR layout
}

Solution 4:

You can use TextUtilsCompat from the support library.

TextUtilsCompat.getLayoutDirectionFromLocale(locale)

Solution 5:

There's a really simple way to check the layout direction of a view, but it falls back to LTR on pre API 17 devices:

ViewUtils.isLayoutRtl(Viewview);

the ViewUtils class comes bundled with the support v7 library, so it should be available already if you're using the appcompat library.

Post a Comment for "Identifying Rtl Language In Android"