2014-10-24 7 views
15

Gibt es eine Möglichkeit zu bestimmen, ob das Gerät in einer Sprache von rechts nach links (etwas wie Arabisch) im Gegensatz zu etwas, das links nach rechts (Englisch) ist?android feststellen, ob Gerät in rechts nach links Sprache/Layout

Etwas kompatibel mit älteren API-Ebenen (bis zu 10) ist notwendig,

SOLUTION

ich die xml-Methode in der akzeptierten Antwort am Ende mit. Etwas weiter auf der ganzen Linie, fügte ich auch die hier angegebenen Code für Fälle, in denen ich keinen Zugang zu GetResources hatte()

Identifying RTL language in Android

weitere Informationen

Diese Frage noch viel Verkehr bekommt ; noch etwas, auf das ich hinweisen wollte: Als ich das ursprünglich anfragte, war es teilweise eine Hilfe, um unterschiedliche Zeigemarken in RTL vs LTR zu adressieren - eine weitere Möglichkeit, dies zu erreichen, ist das Einfügen von Zeichenressourcen im Standardverzeichnis und ldrtl. bedeutet, dass kein Code benötigt wird, um zu bestimmen, welcher zu zeigen ist!

Antwort

31

Sie könnten erstellen Werte-ldrtl Ordner mit einem xml Datei namens isrighttoleft.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_right_to_left">true</bool> 
</resources> 

und in Ihrem Wert Ordner die gleiche Datei mit:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_right_to_left">false</bool> 
</resources> 

Und schließlich in Code:

boolean isRightToLeft = getResources().getBoolean(R.bool.is_right_to_left); 

Der Werte-ldrtl nur auf einem Gerät verwendet werden, wo die spezifischen Einstellungen (e . G. Sprache) sind Sprachen, die von rechts nach links gelesen werden.

+0

ah das ist eine gute Lösung auch. Ich mag dieses auch – Josh

+0

Danke. Normalerweise verwende ich diese "Technik", um zu bestimmen, ob die App auf einem Tablet-Gerät läuft oder nicht;) – ezcoding

+0

Ich habe diese über meine Lösung verwendet, weil das oben funktioniert die ganze Zeit funktioniert meine Lösung nicht onCreateView – Josh

0

Ja, verwenden Sie die Bidi.getBaseLevel() - Funktion, wird 0 für links nach rechts und 1 für rechts nach links zurückgeben.

http://developer.android.com/reference/java/text/Bidi.html#getBaseLevel()

+0

Ich müsste eine Instanz von Bidi korrekt haben? Auf jeden Fall habe ich eine Lösung gefunden, die zu funktionieren scheint. trotzdem danke! – Josh

+0

Ja, Sie müssen einen angeben. – HappyCactus

+1

Bitte geben Sie die gefundene Lösung als zukünftige Referenz an. Vielen Dank. – HappyCactus

1

Wenn immer noch erheblicher Datenverkehr auftritt, sollten die Benutzer auch Configuration.getLayoutDirection() für API 17+ in Betracht ziehen. Es wird entweder LayoutDirection.LTR oder LayoutDirection.RTL zurückgegeben. Ich stelle mir vor, dass ViewCompat.getLayoutDirection (android.view.View) die Richtung zurückgibt, die tatsächlich zum Layout einer bestimmten Ansicht verwendet wurde. Wenn du etwas Seltsames tust, zum Beispiel zu versuchen herauszufinden, welche Person auf welcher Seite eines Chat-Bildschirms sein soll (wie ich), könnte das nützlich sein.

+0

Es gibt eine Möglichkeit für alle API-Versionen, ohne eine Ansicht, hier zu arbeiten: https://stackoverflow.com/a/47119946/878126 –

7

Ich denke, dies ist eine bessere Art und Weise:

val isLeftToRight = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR 

Docs:

https://developer.android.com/reference/android/support/v4/text/TextUtilsCompat.html#getLayoutDirectionFromLocale(java.util.Locale)

Oder, wenn Sie minAPI 17 oder höher haben, können Sie nur verwenden:

val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR 

Text:

https://developer.android.com/reference/android/text/TextUtils.html#getLayoutDirectionFromLocale(java.util.Locale)

+0

Dies sollte die akzeptierte Antwort sein. –

Verwandte Themen