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