I have an app that is available in two languages - English and Hebrew.
I added Hebrew strings using the Translation Editor and I am changing the Locale according to the user selection.
When changing the Locale, it sets the strings to Hebrew like I wanted, but its also changes the toolbar orientation to right-to-left for Hebrew and brings the title and back-button to the right.
English Locale (Default):
Hebrew Locale:
Is there a way to keep the toolbar orientation like the English one?
I want to keep the back button and the title in the left of the toolbar.
Edit: after adding either android:layoutDirection="ltr"
or android:supportsRtl="false"
to the toolbar
xml. arrow is backwards. how ti fix it?
Change Locale but keep left-to-right and other phone orientations
Specifically, add android:supportsRtl="false"
to the <application>
element in your manifest file.
For more information Link
Add android:layoutDirection="ltr" to your appbar layout. That will force ltr in any layout direction
I had this problem too. I had a method to change the locale of the language and the application configuration :
private String loadPreference() {
SharedPreferences shp = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
String language = shp.getString("Language","fa");
Locale myLocale = new Locale(language);
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = myLocale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
String locale = getResources().getConfiguration().locale.getDisplayName();
System.out.println(locale);
return locale;
}
It is changing locale and simultaneously changing the layoutDirection, so you can solve this by setting the direction manually:
private String loadPreference() {
SharedPreferences shp = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
String language = shp.getString("Language","fa");
Locale myLocale = new Locale(language);
Configuration config = new Configuration();
config.setLocale(myLocale);
//manually set layout direction to a LTR location
config.setLayoutDirection(new Locale("en"));
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
String locale = getResources().getConfiguration().locale.getDisplayName();
return locale;
}