Ich habe eine mehrsprachige App geschrieben.Warum erkennt Android das Gebietsschema nicht als RTL, wenn es programmgesteuert eingestellt ist?
Ich habe verschiedene values
Ordner für verschiedene Sprachen wie values-fa
und values-ru
. Da einige dieser Sprachen wie Farsi und Arabisch RTL sind, verwendete ich ein anderes Layout-Design, indem ich ein anderes Layout .xml Dateien in einen Ordner layout-ldrtl
neben dem Hauptordner layout
legte.
Ich habe auch eine Datei is_right_to_left.xml
int einen Ordner mit dem Namen values-ldrtl
benannt, die eine Variable wie folgt definiert:
<bool name="is_right_to_left">true</bool>
Ich habe die gleiche Datei in values
Ordner und legen Sie den Variablenwert false
dort.
Immer dann, wenn in dem Code, den ich wissen muss, verwende ich diese Linie zu verstehen, wenn die aktuellen locale ein RTL ist oder nicht:
isRightToLeft = context.getResources().getBoolean(R.bool.is_right_to_left);
ich die App mit verschiedenen Geräte configs getestet haben und alles funktioniert wie Charme. Zum Beispiel bewirkt das Einstellen der Gerätesprache auf Farsi, dass die App die Zeichenfolgen von values-fa
und die Layouts von layout-ldrtl
liest. Wenn Arabisch für Gerät eingestellt ist, werden Werte von values-ar
gelesen und die Layouts werden auch von layout-ldrtl
gelesen, da beide RTL-Sprachen sind . Es funktioniert natürlich auch für LTR-Sprachen. Das ist, was ich will.
Das Problem tritt auf, wenn ich das Gebietsschema der App programmgesteuert festlegen. Dies ist der Code, den ich in onCreate()
Methode meiner MainActivity
schrieb:
Locale myLocale = new Locale("fa");
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Nun werden die Werte korrekt nach der Sprache zu lesen, aber layout-ldrtl
und values-ldrtl
nie lesen. Also, die App würde in LTR-Design wegen falscher .xml Dateien und falschen Wert von isRightToLeft
Variable laden. Eine Lösung, die ich getestet habe, ist diese .xml Dateien in jedem Sprachlayout-Ordner separat zu setzen, und es funktioniert. Aber ich hoffe, dass ich das Problem besser und besser lösen kann. Und neben der Lösung, warum funktioniert Androide auf diese Weise?
Sie benötigen diese programmatisch zu tun, oder testen Sie einfach Ihre Anwendung? Wenn das letztere, überprüfen Sie http://lifehacker.com/enable-androids-secret-right-to-left-layout-if-youre-le-1676267178 – petey
@petey Ich muss es programmgesteuert tun. Ein Fall ist, den Benutzer die Sprache der App wählen zu lassen. Danke für die Antwort. – EmJiHash