use locale (ltr/rtl) for gravity in TextView

Issue

I have a simple TextView which should have android:gravity="left" for ltr system locales and android:gravity="right" for rtl system locales.

The obvious choice would be: android:gravity="start" but then e.g. english text will always be left-aligned and hebrew right-aligned.

Here is how it looks with android:gravity="start":

LTR locale:

|          לורם|   // incorrect
|test           |  // correct

RTL locale:

|          לורם|  // correct
|test           |  // incorrect

it’s supposed to look like that:

LTR locale:

|לורם           |  
|test            | 

RTL locale:

|          לורם|  
|           test| 

Is it possible to do that without using a layout-ldrtl folder with a modified xml file? This would complicate development a lot because I would have to edit a lot of layout files twice…

edit: a solution for API 17+ is enough.
I wrote system locale, but actually I’m allowing the user to change the app language like that:

Configuration configuration = context.getResources().getConfiguration();
configuration.setLayoutDirection(selectedLocale);
configuration.locale = selectedLocale;
context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());

so it would be great if this locale would be considered for the rtl <-> ltr choice.

Solution

I’m using this solution now, I would prefer a simple xml solution, but this seems minimal so far:

if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) {
  if (DynamicLanguage.getLayoutDirection(getContext()) == View.LAYOUT_DIRECTION_RTL) {
    this.textView.setGravity(Gravity.RIGHT);
  } else {
    this.textView.setGravity(Gravity.LEFT);
  }
}

Answered By – agrajag

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published